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

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

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

静态代理模式

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

//接口
interface Subject{
	public void doAction();
}
//实现类
 class RealSubject implements Subject{
	@Override
	public 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 
           
      }
}




 
  
 
  

你可能感兴趣的:(设计模式)