设计模式之装饰者模式

装饰者模式:
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

如下图所示为装饰者模式的类图:
如图所示,装饰者模式最关键的一点是装饰者与被装饰者必须继承同一个抽象的父类,装饰者再引用被装饰者。这样的设计方式起到扩展的功能。当需要扩展功能时不需要修改被装饰者的代码,只需要在装饰者扩展其功能。这是比较符合开闭原则的。(对扩展开放,对修改关闭)
在这里插入图片描述
代码实现:
装饰者与被装饰者都要实现的父类Component

public abstract class Component {

    public abstract void methodA();

}

具体实现的装饰者ConcreteComponent

public class ConcreteComponent extends Component{

    @Override
    public void methodA() {
        System.out.println("被装饰者");
    }
}

抽象的装饰者类Decorator

package org.mine.patterns.wrapper.learn;

/**
 * @ClassName Decorator
 * @Description
 * @Author Administrator
 * @Date 2021/4/15 0015 22:48
 * @Version 1.0
 */
public abstract class Decorator extends Component{

    @Override
    public void methodA() {

    }

    //装饰者其他方法
    public final void methodB() {
        template();
    }

    public abstract void template();
}

具体实现的装饰者类ConcretrDecoratorA

package org.mine.patterns.wrapper.learn;

/**
 * @ClassName ConcreteDecoratorA
 * @Description
 * @Author Administrator
 * @Date 2021/4/15 0015 22:53
 * @Version 1.0
 */
public class ConcreteDecoratorA extends Decorator{
    private Component component;

    public ConcreteDecoratorA(Component component) {
        this.component = component;
    }

    @Override
    public void methodA() {
        component.methodA();
        System.out.println("装饰者装饰");
    }

    @Override
    public void template() {
        System.out.println("子类实现");
    }
}

具体的代码地址:
https://github.com/ryanzhuyuzhao/patterns.git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值