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.gwol酆璁冻嘌f;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 { pu芟鲠阻缒blic 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(); //救人的核心操作 }}