为其他对象提供一个代理以控制对这个对象的访问
举例类比代购:
注意:
1.在物品成交前,买家不知道是哪个代购帮买,代购也不知道具体帮谁买。所以这块用的是接口,而不是具体子类。
private ISubject realSubject
2.需要的东西:
1)业务接口ISubject:需要干的事-即要买的东西(假如买电脑)-买电脑是核心业务
2)真实业务类:真正付款买东西的买家
3)代理类:辅助我们买东西,有辅助 *** 作-如买东西前后干的事
4)平台:通过平台Platform,将代理人与客户产生联系
5)业务:取得一个业务对象-平台下单
代码实现:
interface ISubject{ void buyComputer(); } class RealSubject implements ISubject{ @Override public void buyComputer() { System.out.println("买个 mac pro 15寸顶配电脑"); } } class ProxySubject implements ISubject{ private ISubject realSubject;//真正成交前,买电脑的人也不知道具体哪个代购帮买,代购也不知道具体要帮谁买,所以这块用的是接口,而不是具体哪个子类 //通过构造方法把真实业务传进来 public ProxySubject(ISubject realSubject) { this.realSubject = realSubject; } public void preHandle(){ System.out.println("买票去某地看好电脑"); } @Override public void buyComputer() { //调用买前 *** 作 preHandle(); //付钱这个 *** 作是通过真实业务处理的-真实的付钱人付钱 this.realSubject.buyComputer(); //调用买后 *** 作 postHandle(); } public void postHandle(){ System.out.println("再买票把电脑带回来"); } } class Platform{ //获取 public static ISubject getInstance() { return new ProxySubject(new RealSubject());//在代购平台上下单 } } public class Subject { public static void main(String[] args) { ISubject subject=Platform.getInstance();//取得一个业务的对象 subject.buyComputer(); } }总结
代理模式是基于接口的,一个接口实现两个类,一个是真实业务类,另一个是辅助真实业务的代理类,最终将真实业务传递给代理类来完成整个业务的实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)