代理模式和装饰器模式特别的像,尤其体现在代码上
总结:1、加以控制 2 、添加功能
以静态代理举例
一、静态代理
1创建接口
public interface Train { public void run2(); }
2、实现接口的实体类
public class TrainCar extends Car implements Train{
@Override
public void run2() {
System.out.println("火车拉人");
}
}
3、代理类
/** * 火车代理 * @author tomca * */ //所有的都是来源于train ,这个代理类代理的是trainCar,以后trainCar的事情都会由TrainCarProxy来进行代理,你能在使用TrainCar这个类了,这个就是和装饰类最大区别 public class TrainCarProxy implements Train{ private TrainCar trainCar; public TrainCarProxy(TrainCar trainCar){ this.trainCar = trainCar; } @Override public void run2() { // TODO Auto-generated method stub } }
总结:
所有的都是来源于train ,这个代理类代理的是trainCar,以后trainCar的事情都会由TrainCarProxy来进行代理,你能在使用TrainCar这个类了,这个就是和装饰类最大区别
原有的类不会暴露出来,不会修改的原有的类可以加以保护。
缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.