代理模式(静态代理)

代理模式中,生活中仍是比较常见的,可是此次我想举个比较接地气的例子,嘿嘿嘿..虽然有点污,可是我的以为还算是比较接地气吧,下面就来看看吧.....

 

 

水浒传你们应该都看过吧,其中潘金莲跟西门庆是怎么勾搭在一块儿的,经过王婆对吧,就是由于王婆的牵线搭桥,才让西门庆跟潘金莲勾搭在一块儿的,那么,咱们就能够当作,王婆是潘金莲的代理,西门庆经过访问王婆,获得了潘金莲,作了苟且之事,咱们先定义一个接口,叫作 BadWoman

public interface BadWoman {
    //抛媚眼
	void makeEyesWithMan();
    //嘿嘿嘿
	void happyTimeWithMan();
}

 

 

接着定义一个潘金莲,实现BadWoman接口,做为被代理者,由王婆来代理潘金莲跟谁作苟且之事

public class PanJinLian implements BadWoman {
	@Override
	public void makeEyesWithMan() {
		System.out.println("潘金莲,抛媚眼");
	}

	@Override
	public void happyTimeWithMan() {
		System.out.println("潘金莲...嘿嘿嘿...");
	}
}

 

而后在定义一个王婆,实现BadWoman接口,由于代理者要知道被代理者作什么操做,确定要实现共同接口来保证能代理者的行为

public class WangPo implements BadWoman {
    //经过多态进行代理
	private BadWoman badWoman;

    //默认给潘金莲代理
	public WangPo() {
		this.badWoman = new PanJinLian();
	}

    //能够替换被代理者
	public WangPo(BadWoman badWoman) {
		this.badWoman = badWoman;
	}

    //调用的是王婆的抛媚眼方法,实际上执行者是被代理者
	@Override
	public void makeEyesWithMan() {
		badWoman.makeEyesWithMan();
	}

    //跟抛媚眼同样
	@Override
	public void happyTimeWithMan() {
		badWoman.happyTimeWithMan();
	}
}

 

 

最后,咱们在定义一个西门庆,来调用代理者(王婆)跟西门庆作苟且之事

public class XiMenQing {

	public static void main(String[] args){
		System.out.println("呼叫王婆..");
		WangPo wangPo = new WangPo();

		wangPo.makeEyesWithMan();
		wangPo.happyTimeWithMan();
	}
}

 

能够看到,虽然调用的是代理者王婆,可是实际上执行者是潘金莲,这个西门庆可不知道,他只知道,他调用的是王婆的方法,并且,经过代理模式,咱们能够增强对代理者的访问,在代理者调用被代理者行为前,作一些其它的处理,例如: 增长参数处理,打印等等...并且咱们要替换代理者也很容易,具体以下java

 

 

咱们能够试试替换下王婆的被代理者,由潘金莲变成贾氏,咱们定义一个贾氏,也实现BadWoman接口编程

public class JiaShi implements BadWoman {
	@Override
	public void makeEyesWithMan() {
		System.out.println("贾氏抛媚眼");
	}

	@Override
	public void happyTimeWithMan() {
		System.out.println("贾氏..嘿嘿嘿...");
	}
}

 

而后西门庆类增长下代码,替换掉王婆默认的被代理者

public class XiMenQing {

	public static void main(String[] args){
		System.out.println("呼叫王婆..");
		JiaShi jiaShi = new JiaShi();
		WangPo wangPo = new WangPo(jiaShi);

		wangPo.makeEyesWithMan();
		wangPo.happyTimeWithMan();
	}
}

 

这样,咱们用最小的代价完成了被代理者的替换,并且,代码耦合度低,替换被代理者只需换个实现,并且能够增强被代理者的访问,其它地方的代码都不须要变更,读者说若是你说: 我就须要变更,你打我!  笔者:来,你过来,我给你看个板砖,你那么多地方要变更,改不死你,面向接口编程的原则你忘了?最后是UML类图app

 

 

 

 

到这,文章就结束了!ide

以上,均为本人我的理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流this

欢迎转载,请注明出处跟做者,谢谢!spa

相关文章
相关标签/搜索