DECORATOR(装饰)-- 对象结构型模式

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

  2. 别名:
    包装器Wrapper

  3. 动机:
    希望给某个对象而彼时整个类添加一些功能。

  4. 适用性:
    a. 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
    b. 处理那些可以撤销的职责。
    c. 当不能采用生成子类的方法进行扩充时。

  5. 结构:

装饰模式结构图

  1. 参与者:
    a. Component: 定义一个对象接口,可以给这些对象动态的添加职责。
    b. ConcreteComponent: 定义一个对象,可以给这个对象添加一些职责。
    c. Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
    d. ConcreteDecorator: 向组件添加职责。

  2. 协作:
    a. Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。

  3. 效果:
    a. 比静态继承更灵活
    b. 避免在层次结构高层的类有太多的特征
    c. Decorator与它的Component不一样
    d. 有许多小对象

  4. 实现:
    a. 接口的一致性
    b. 省略抽象的Decorator类
    c. 保持Component类的简单性
    d. 改变对象外壳与改变对象内核

  5. 代码示例:

    public interface Component {
        void operation();
    }
    
    public class ConcreteComponent implements Component{
        @Override
        public void operation() {
            System.out.println("This is ConcreteComponent");
        }
    }
    
    public class Decorator implements Component {
    
        protected Component component;
    
        public Decorator(Component component) {
            this.component = component;
        }
    
        @Override
        public void operation() {
            component.operation();
        }
    }
    
    public class ConcreteDecoratorA extends Decorator {
        private String addedState;
    
        public ConcreteDecoratorA(Component component) {
            super(component);
        }
    
        public String getAddedState() {
            return addedState;
        }
    
        public void setAddedState(String addedState) {
            this.addedState = addedState;
        }
    }
    
    public class ConcreteDecoratorB extends Decorator{
        public ConcreteDecoratorB(Component component) {
            super(component);
        }
    
        public void addedBehavior() {
            System.out.println("This is ConcreteDecoratorA addedBehavior");
        }
    }
    
  6. 已知应用:

  7. 相关模式:
    Adapter模式:Decorator模式不同于Adapter模式,因为装饰仅改变对象的职责而不改变它的接口;而适配器将给对象一个全新的接口。
    Composite模式:可以将装饰视为一个退化的、仅有一个组件的组合。装饰仅给对象添加一些额外的职责–它的目的不在于对象聚合。
    Strategy模式:用一个装饰你可以改变对象的外表,而Strategy模式使得你可以改变对象的内核。这是改变对象的两种途径。

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值