代理模式 与装饰模式的区别 干货

来源:互联网 发布:军人网络泄密心得体会 编辑:程序博客网 时间:2024/05/20 22:26

装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。


因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。


而,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。


//代理模式
public class Proxy implements Subject{

private Subject subject;
public Proxy(){
//关系在编译时确定
subject = new RealSubject();
}
public void doAction(){
….
subject.doAction();
….
}
}
复制代码
复制代码
//代理的客户
public class Client{
public static void main(String[] args){
//客户不知道代理委托了另一个对象
Subject subject = new Proxy();

}
}
复制代码

装饰模式:

复制代码
//装饰器模式
public class Decorator implements Component{
private Component component;
public Decorator(Component component){
this.component = component
}
public void operation(){
….
component.operation();
….
}
}
复制代码
复制代码
//装饰器的客户
public class Client{
public static void main(String[] args){
//客户指定了装饰者需要装饰的是哪一个类
Component component = new Decorator(new ConcreteComponent());

}
}

1 0