定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
理解:代理模式就是将对象的能力委托给其他对象进行访问和执行,同时其他对象也拥有对象的相同能力。
这个设计模式,可以运用于集成redis、monggo等相关组件时,将存和取数据定义成“缓存”类型的两个功能,再定义“代理缓存”来代理“redis缓存”,这样往后扩展或者更换成其他缓存方法时,可直接修改“代理缓存”对象代理的对象,而不需要去修改业务代码;
场景:比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
第一步,先定义一种类型的女人:
public interface KindWomen {public void makeEyesWithMan();public void happyWithMan();}
第二步,定一个潘金莲:
public class PanJinLian implements KindWomen {@Overridepublic void makeEyesWithMan() {System.out.println("潘金莲抛媚眼");}@Overridepublic void happyWithMan() {System.out.println("潘金莲正在happy中......");}}
第三步,再定一个丑陋的王婆:
public class WangPo implements KindWomen {private KindWomen kindWomen;public WangPo() {this.kindWomen = new PanJinLian();}public WangPo(KindWomen kindWomen) {this.kindWomen = kindWomen;}@Overridepublic void makeEyesWithMan() {this.kindWomen.makeEyesWithMan();}@Overridepublic void happyWithMan() {this.kindWomen.happyWithMan();}}
第四步,定义西门庆通过王婆勾搭潘金莲:
public class XiMenQing {public static void main(String[] args) {WangPo wangPo = new WangPo();wangPo.makeEyesWithMan();wangPo.happyWithMan();}}
第五步扩展,西门庆也可以通过代理人王婆勾搭其他女人:
比如定义贾氏:
public class JiaShi implements KindWomen {@Overridepublic void makeEyesWithMan() {System.out.println("贾氏抛媚眼");}@Overridepublic void happyWithMan() {System.out.println("贾氏正在happy中......");}}
西门庆勾搭贾氏:
public class XiMenQing2 {public static void main(String[] args) {JiaShi jiaShi = new JiaShi();WangPo wangPo = new WangPo(jiaSh);wangPo.makeEyesWithMan();wangPo.happyWithMan();}}
