分享

设计模式--装饰模式(Decorator)

 遥远的桥zz 2011-04-06
设计模式--装饰模式(Decorator) 收藏
装饰模式
概述
    动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。适用性    1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
    2.处理那些可以撤消的职责。
    3.当不能采用生成子类的方法进行扩充时。参与者    1.Component
      定义一个对象接口,可以给这些对象动态地添加职责。
    2.ConcreteComponent
      定义一个对象,可以给这个对象添加一些职责。
    3.Decorator
      维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
    4.ConcreteDecorator
      向组件添加职责。Exampleview plaincopy to clipboardprint?
Component
public interface Person {
    void eat();
}
ConcreteComponent
public class Man implements Person {
 public void eat() {
  System.out.println("男人在吃");
 }
}
Decorator
public abstract class Decorator implements Person {
    protected Person person;
   
    public void setPerson(Person person) {
        this.person = person;
    }
   
    public void eat() {
        person.eat();
    }
}
ConcreteDecorator
public class ManDecoratorA extends Decorator {
    public void eat() {
        super.eat();
        reEat();
        System.out.println("ManDecoratorA类");
    }
    public void reEat() {
        System.out.println("再吃一顿饭");
    }
}
public class ManDecoratorB extends Decorator {
   
    public void eat() {
        super.eat();
        System.out.println("===============");
        System.out.println("ManDecoratorB类");
    }
}
Test
public class Test {
    public static void main(String[] args) {
        Man man = new Man();
        ManDecoratorA md1 = new ManDecoratorA();
        ManDecoratorB md2 = new ManDecoratorB();
       
        md1.setPerson(man);
        md2.setPerson(md1);
        md2.eat();
    }
}
result
男人在吃
再吃一顿饭
ManDecoratorA类
===============
ManDecoratorB类
 
发表于 @ 2009年05月09日 17:39:00 | 评论( 0 ) | 编辑| 举报| 收藏  
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/terryzero/archive/2009/05/10/4163730.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多