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