`

Java-----装饰模式

阅读更多
此文章问转载

decorator 模式的功能是:给一个对象添加一些额外的职责(操作),虽然此功能可以用继承实现,但装饰模式比生成子类更灵活些。

装饰的意思:就是包装一下。把另的对象包装一下。我这里只简单示例下怎么使用。

业务接口 Component:
 package com.chenlb.dp.decorator;  
   
 /** 
  * 业务接口 
  */  
 public interface Component {  
   
     void operation();  
 }

具体业务 ConcreteComponent:
  package com.chenlb.dp.decorator;  
   
 /** 
  * 具体业务类. 
  */  
 public class ConcreteComponent implements Component {  
   
     public void operation() {  
         System.out.println("I'm "+this.getClass().getName());  
     }  
   
 }

装饰 Decorator:
 package com.chenlb.dp.decorator;  
  
/** 
 * 装饰类. 
 */  
public class Decorator implements Component {  
  
    private Component component;  
  
    public Decorator(Component component) {  
        this.component = component;  
    }  
  
    public void operation() {  
        component.operation();  
    }  
  
} 

执行前装饰 BeforeDecorator:
 package com.chenlb.dp.decorator;  
   
 /** 
  * 在业务执行前加点额外的操作. 
  */  
 public class BeforeDecorator extends Decorator {  
   
     public BeforeDecorator(Component component) {  
         super(component);  
     }  
   
     public void operation() {  
         before();  
         super.operation();  
     }  
   
     private void before() {  
         System.out.println("before: I'm "+this.getClass().getName());  
     }  
   
 }

执行后装饰 AfterDecorator:
  package com.chenlb.dp.decorator;  
   
 /** 
  * 在业务执行完后添加额外的操作. 
  */  
 public class AfterDecorator extends Decorator {  
   
     public AfterDecorator(Component component) {  
         super(component);  
     }  
   
     public void operation() {  
         super.operation();  
         after();  
     }  
   
     private void after() {  
         System.out.println("after: I'm "+this.getClass().getName());  
     }  
 } 

运行示例 Demo:
 package com.chenlb.dp.decorator;  
  
public class Demo {  
  
    public static void main(String[] args) {  
        Component component = new ConcreteComponent();  
        component.operation();  
        System.out.println("----------------------------------------");  
        component = new BeforeDecorator(new ConcreteComponent());  
        component.operation();  
        System.out.println("----------------------------------------");  
        component = new AfterDecorator(new ConcreteComponent());  
        component.operation();  
        System.out.println("----------------------------------------");  
        component = new AfterDecorator(new BeforeDecorator(new ConcreteComponent()));  
        component.operation();  
        System.out.println("----------------------------------------");  
        component = new BeforeDecorator(new AfterDecorator(new ConcreteComponent()));  
        component.operation();  
    }  
  
} 

分享到:
评论
1 楼 adam_zs 2013-03-08  
没看懂哦

相关推荐

Global site tag (gtag.js) - Google Analytics