Java代理模式

来源:互联网 发布:icloud照片怎么导入mac 编辑:程序博客网 时间:2024/06/05 11:19

Java代理模式:即Proxy Pattern,23种java常用设计模式之一。

 

1、什么是代理模式?

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。

 

2、策略模式有什么好处?

    在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

 

3、代理模式一般涉及到的角色有: 

抽象角色:声明真实对象和代理对象的共同接口;

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。

                  同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

 真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

 

4、应用场景举例:

人物:潘金莲、王婆、西门庆、贾氏

项目结构如下:

(1).定义同一种类型的人——贪婪——KindWoman.java

package com.impl;public interface KindWoman {/* * 定义同一种类型(坏)女人:王婆和潘金莲都属于这个类型的女人 */          public void makemoney();//贪财}


(2).潘金莲实现了这种贪婪——PanJinLian.java

package com.dao;import com.impl.KindWoman;public class PanJinLian implements KindWoman {/* * 潘金莲:贪财 */public void makemoney() {// TODO Auto-generated method stubSystem.out.println("潘金莲贪图钱财!");}}

 

(3).王婆同样很贪婪——WangPo.java

package com.dao;import com.impl.KindWoman;public class WangPo implements KindWoman {/* * 王婆:贪婪的媒婆 */ private KindWoman kindWoman; public WangPo(){     //默认的话是潘金莲的代理this.kindWoman = new PanJinLian();  }  //她可以是KindWomam的任何一个的代理,只要是这一类型 public WangPo(KindWoman kindWoman){ this.kindWoman = kindWoman; } public void makemoney() {     this.kindWoman.makemoney();}}

 

(4).假设贾氏也是西门庆骗来的女人——贾氏同样贪婪——JiaShi.java

package com.dao;import com.impl.KindWoman;public class JiaShi implements KindWoman {/* * 賈氏:貪財 */public void makemoney() {// TODO Auto-generated method stubSystem.out.println("贾氏贪图钱财!");}}

 

(5).西门庆出场——XiMenQing.java

package com.test;import com.dao.JiaShi;import com.dao.WangPo;public class XiMenQing {public static void main(String[] args) {WangPo wangPo = new WangPo();//表面上是王婆贪财,其实还是潘金莲贪财wangPo.makemoney();JiaShi jiaShi = new JiaShi();wangPo = new WangPo(jiaShi);
                //表面上是王婆贪财,其实还是潘金莲贪财
                wangPo.makemoney();}}


(6).故事的结局——本质:

WangPo实现了对PanJinLian和JiaShi的makemoney()方法的贪财的功能,而WangPo,PanJinLian,JiaShi都实现了KindWoman接口,通过调用WangPo的makemoney()方法,我们可以实现对PanJinLian和JiaShi的makemoney()方法的贪财的功能,而不用在PanJinLian和JiaShi的makemoney()方法中作任何实现,这就是代理的作用。

代理实现时WangPo,PanJinLian和JiaShi都必需实现KindWoman接口。

0 0
原创粉丝点击