静态代理模式和装饰模式的区别

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

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

静态代理模式

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


    
    
  1. //接口
  2. interface Subject{
  3. public void doAction();
  4. }
  5. //实现类
  6. class RealSubject implements Subject{
  7. @Override
  8. public void doAction() {
  9. System.out.println( “do something”);
  10. }
  11. }
  12. //代理类
  13. class Proxy implements Subject{
  14. private Subject subject;
  15. public Proxy(){
  16. //关系在编译时确定
  17. subject = new RealSubject();
  18. }
  19. public void doAction(){
  20. //控制访问
  21. if()
  22. subject.doAction();
  23. else
  24. }
  25. }
装饰模式

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


    
    
  1. interface Component{
  2. public void operate();
  3. }
  4. //具体构件
  5. class ConcreteComponent implements Component{
  6. public void operate(){
  7. System.out.print( "do somthing");
  8. }
  9. }
  10. //装饰者
  11. class Decorator implements Component{
  12. private Component component;
  13. public Decorator(Component component){
  14. //通过构造器传值
  15. this.component = component
  16. }
  17. public void operation(){
  18. do something
  19. component.operation();
  20. do Something
  21. }
  22. }




 
   
 
   

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

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

静态代理模式

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


  
  
  1. //接口
  2. interface Subject{
  3. public void doAction();
  4. }
  5. //实现类
  6. class RealSubject implements Subject{
  7. @Override
  8. public void doAction() {
  9. System.out.println( “do something”);
  10. }
  11. }
  12. //代理类
  13. class Proxy implements Subject{
  14. private Subject subject;
  15. public Proxy(){
  16. //关系在编译时确定
  17. subject = new RealSubject();
  18. }
  19. public void doAction(){
  20. //控制访问
  21. if()
  22. subject.doAction();
  23. else
  24. }
  25. }
装饰模式

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


  
  
  1. interface Component{
  2. public void operate();
  3. }
  4. //具体构件
  5. class ConcreteComponent implements Component{
  6. public void operate(){
  7. System.out.print( "do somthing");
  8. }
  9. }
  10. //装饰者
  11. class Decorator implements Component{
  12. private Component component;
  13. public Decorator(Component component){
  14. //通过构造器传值
  15. this.component = component
  16. }
  17. public void operation(){
  18. do something
  19. component.operation();
  20. do Something
  21. }
  22. }




 
 
 
 

猜你喜欢

转载自blog.csdn.net/sunjinjuan/article/details/81036341