• 装饰模式

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 概述

    动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

    • 适用性

    1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

    2.处理那些可以撤消的职责。

    3.当不能采用生成子类的方法进行扩充时。

    • 参与者

    1.Component
    定义一个对象接口,可以给这些对象动态地添加职责。

    2.ConcreteComponent
    定义一个对象,可以给这个对象添加一些职责。

    3.Decorator
    维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。

    4.ConcreteDecorator
    向组件添加职责。

    • 类图

    • 例子

    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类

    • 标签:
    • decorator
    • 模式
    • 对象
    • void
    • public
    • person
    • 职责
    • 添加
    • eat
    • 装饰
    • man
    • class
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部