代理模式与java中的动态代理

时间:2021-12-30 00:11:35

前言

   代理模式又分为静态代理与动态代理,其中动态代理是Java各大框架中运用的最为广泛的一种模式之一,下面就用简单的例子来说明静态代理与动态代理。

场景

   李雷是一个唱片公司的大老板,很忙,但是经常有一些鸡毛蒜皮的小事总不能自己亲自去跑腿吧,大老板哪里有这么多时间,于是他找了一个助手叫做韩梅梅,韩梅梅就负责帮老板去处理这些事情。下面就模拟韩梅梅代理老板去处理一些小事的情况。

静态代理

代码

  • 老板类
public class Boss {

	private String name;

	private Boss(String name){
this.name = name;
} public void ok(){
System.out.println(name +"说: 我觉得OK! :)");
} public void notOk(){
System.out.println(name + "说: 我觉得不行! :(");
} public void normal(){
System.out.println(name + "说: 我觉得很普通! XD");
} }
  • 助理类
public class Secretary {

	private Boss boss;

	private String name;

	public Secretary(String secreataryName,Boss boss){
name = secreataryName;
this.boss = boss;
} public void ok(){
boss.ok();
} public void notOk(){
boss.notOk();
} public void normal(){
boss.normal();
}
}
  • 客户端
public class HanMMClient {
public static void main(String[] args) { Boss boss = new Boss("李雷");
Secretary proxy = new Secretary("韩梅梅", boss); proxy.ok();
proxy.notOk();
proxy.normal();
}
}

这样一个最初版本的代理模式就完成了,客户端中并没有与老板直接接触就通过韩梅梅代理成功的调用了老板的三个方法。

可以发现 代理类韩梅梅与老板实现了相同的方法,因此将他们抽象成为一个Iboss接口,再分别实现,这样的静态代理模式就趋于完整了。

  • IBoss 接口
public interface Iboss {

	void ok();

	void notOk();

	void normal();
}
  • 客户端
public class HanMMClient {
public static void main(String[] args) { Iboss boss = new Boss("李雷");
Iboss proxy = new Secretary("韩梅梅",boss); proxy.ok();
proxy.notOk();
proxy.normal();
}
}

运行一下,结果良好