码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式(装饰模式)

时间:2015-06-12 18:57:42      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

装饰模式用于给对象动态而灵活的添加属性,主要包含如下几个角色:

  • Component:定义一个对象接口,可以给这些对象动态地添加职责,本例中是Product
  • ConcreteComponent:具体的对象,用以被添加属性,本例中是ProductImpl,通过addAttribute被添加属性
  • Decorator:装饰器的抽象,维持一个Component指针,并继承该指针;本例中是BaseChange
  • ConcreteComponent:具体的装饰器,本例中是OneChange和TwoChange

技术分享

代码如下:

  • Product
public interface Product {
    public void addAttribute();
}
  • ProductImpl
public class ProductImpl implements Product {

    @Override
    public void addAttribute() {
        System.out.println("Add base Attribute");
    }
}
  • BaseChange
public class BaseChange implements Product {
    
    private Product product;
    
    public BaseChange(Product product){
        this.product = product;
    }

    @Override
    public void addAttribute() {
        product.addAttribute();
    }
}
  • OneChange && TwoChange
public class OneChange extends BaseChange {

    public OneChange(Product product) {
        super(product);
    }
    
    @Override
    public void addAttribute() {
        super.addAttribute();
        System.out.println("One Change");
    }
}
public class TwoChange extends BaseChange {
    
    public TwoChange(Product product) {
        super(product);
    }
    
    @Override
    public void addAttribute() {
        super.addAttribute();
        System.out.println("Two Change");
    }
}
  • App
public class App {

    public static void main(String[] args) {
        Product product = new ProductImpl();
        
        Product change = new TwoChange(new OneChange(product));
        change.addAttribute();
    }

}

输出结果为:

Add base Attribute
One Change
Two Change

 

设计模式(装饰模式)

标签:

原文地址:http://www.cnblogs.com/Fredric-2013/p/4572218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!