代理模式和装饰模式的差别

来源:互联网 发布:网络防火墙怎么关闭 编辑:程序博客网 时间:2024/05/12 20:12

       学了代理模式之后发现静态代理模式和装饰模式非常的相似,代理类和被代理的客户实现同一个接口,装饰者和被装饰者也是实现的同一个接口实现方式也类似(针对接口编程是一个主要设计原则)。搜索之,得到结论:代理模式主要是控制对某个特定对象访问,而装饰模式主要是为了给对象添加行为

所以两类的设计模式的代码还是有一些差别。下面代码来着网上,做了一些修改,原网址http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html

静态代理模式

通常自己构造对象,方法中控制对象的访问。

//接口interface Subject{public void doAction();}//实现类 class RealSubject implements Subject{@Overridepublic void doAction() {  System.out.println("do something");}  } //代理类 class Proxy implements Subject{    private Subject subject;    public Proxy(){        //关系在编译时确定         subject = new RealSubject();    }    public void doAction(){        //控制访问          if()          subject.doAction();          else          ...    }}
装饰模式

  在构造函数中传入被装饰的对象。

interface Component{  public void operate();}//具体构件class ConcreteComponent implements Component{   public void operate(){         System.out.print("do somthing");    }}//装饰者class Decorator implements Component{ private Component component;     public Decorator(Component component){ //通过构造器传值 this.component = component } public void operation(){            do something                   component.operation();           do Something                  }}






0 0
原创粉丝点击