java设计模式之代理设计模式(Proxy)
1、所谓的代理严格来讲就是两个子类共同实现一个接口,其中一个子类负责真实的业务实现,而另外的子类负责辅助真实业务主体的操作。

2、现在我们实现代理设计模式,定义一个共同的主题接口:
interface ISubject {
public void save(); //核心功能是救人
}

3、核心实现实现这个主题接口:
class RealSubject implements ISubject {
public void save() {
System.out.println("真正的实现方法!");
}
}

4、代理实现主题接口:
class ProxySubject implements ISubject {
private ISubject realSubject;
public ProxySubject(ISubject subject) {
this.realSubject = subject;
}
public void broke() {
System.out.println("破门而入");
}
public void get() {
System.out.println("得到奖励");
}
public void save() {
this.broke();//真实操作前的准备
this.realSubject.save();//调用真实的业务
this.get();//操作后的首位
}
}

5、在main方法中调用代理调用来实现真实的业务调用。
package com.gwolf;
interface ISubject {
public void save(); //核心功能是救人
}
class RealSubject implements ISubject {
public void save() {
System.out.println("真正的实现方法!");
}
}
class ProxySubject implements ISubject {
private ISubject realSubject;
public ProxySubject(ISubject subject) {
this.realSubject = subject;
}
public void broke() {
System.out.println("破门而入");
}
public void get() {
System.out.println("得到奖励");
}
public void save() {
this.broke();//真实操作前的准备
this.realSubject.save();//调用真实的业务
this.get();//操作后的首位
}
}
public class Proxy {
public static void main(String[] args) {
ISubject subject = new ProxySubject(new RealSubject());
//通过代理类对象发出,利用代理类来实现真实的业务调用
subject.save(); //救人的核心操作
}
}

6、为了实现代理对象和真实对象的解耦,我们使用工厂类来创造主题。
package com.gwolf;
interface ISubject {
public void save(); //核心功能是救人
}
class RealSubject implements ISubject {
public void save() {
System.out.println("真正的实现方法!");
}
}
class ProxySubject implements ISubject {
private ISubject realSubject;
public ProxySubject(ISubject subject) {
this.realSubject = subject;
}
public void broke() {
System.out.println("破门而入");
}
public void get() {
System.out.println("得到奖励");
}
public void save() {
this.broke();//真实操作前的准备
this.realSubject.save();//调用真实的业务
this.get();//操作后的首位
}
}
class Factory {
public static ISubject getInstance() {
return new ProxySubject(new RealSubject());
}
}
public class Proxy {
public static void main(String[] args) {
ISubject subject = Factory.getInstance();
//通过代理类对象发出,利用代理类来实现真实的业务调用
subject.save(); //救人的核心操作
}
}
