代理模式
英文:Proxy Pattern,23种java常用设计模式之一
定义:对其他对象提供一种代理以控制对这个对象的访问。
主要作用:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
思想:为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。、
应用举例:
假设有一个接口,IRun(),里面有一个空的run() (跑),所以有Animal都实现(implements)这个方法。但是有的animal比较高级,在跑的时候还可以sing() (唱歌),我们不能直接修改IRun()接口,也不能在Animal的通用方法中单独添加这个方法(因为用到这个新增方法的毕竟是少数)。这样就需要一个代理类RunProxy来为会sing()的特殊animal添加一个单独的sing(),最后在客户端调用代理类。代码如下:
接口类 IRun:
public interface IRun { public void run(String animal_name); }
实现类Animal:
public class Animal implements IRun{ @Override public void run(String animal_name) { System.out.println("现在是" + animal_name + "在跑!"); } }
代理类 RunProxy:
public class RunProxy implements IRun{ IRun irun; public RunProxy(IRun irun) { this.irun = irun; } @Override public void run(String animal_name) { irun.run(animal_name); } public void run(String animal_name, String singname) { irun.run(animal_name); sing(singname); } private void sing(String singname) { System.out.println("在唱:" + singname); } }
客户端:
public class TestProxy { public static void main(String[] args) { // 不需要执行额外方法的 System.out.println("*****不需要执行额外方法的****"); IRun animal1 = new Animal(); animal1.run("猪"); // 需要执行额外方法的 System.out.println("*****需要执行额外方法的****"); RunProxy run = new RunProxy(animal1); run.run("猪", "猪很肥呀猪很肥~~"); } }