学了代理模式之后发现静态代理模式和装饰模式非常的相似,代理类和被代理的客户实现同一个接口,装饰者和被装饰者也是实现的同一个接口,实现方式也类似(针对接口编程是一个主要设计原则)。搜索之,得到结论:代理模式主要是控制对某个特定对象访问,而装饰模式主要是为了给对象添加行为。
所以两类的设计模式的代码还是有一些差别。下面代码来着网上,做了一些修改,原网址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
}
}