装饰模式

Posted milovetingting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰模式相关的知识,希望对你有一定的参考价值。

个人博客

http://www.milovetingting.cn

装饰模式

模式介绍

装饰模式也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一。

模式定义

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

使用场景

需要透明且动态地扩展类的功能时。

简单使用

定义Component

public abstract class Component {

    public abstract void operate();

}

定义具体的Component

public class ConcreteComponent extends Component {

    @Override
    public void operate() {
        System.out.println("ConcreteComponent operate");
    }

}

定义Decorator

public abstract class Decorator extends Component {

    private Component component;

    public Decorator(Component component) {
        super();
        this.component = component;
    }

    @Override
    public void operate() {
        component.operate();
    }

}

定义具体的Decorator

public class ConcreteDecorator extends Decorator {

    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void operate() {
        operateA();
        super.operate();
        operateB();
    }

    public void operateA() {
        System.out.println("operateA");
    }

    public void operateB() {
        System.out.println("operateB");
    }

}

调用

public class Main {

    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        Decorator decorator = new ConcreteDecorator(component);
        decorator.operate();
    }

}

输出结果

operateA
ConcreteComponent operate
operateB

以上是关于装饰模式的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf 模板 - 有没有办法装饰模板而不是包含模板片段?

swift设计模式学习 - 装饰模式代码大全

设计模式---装饰者模式

设计模式之单例模式

装饰模式与代理模式的区别

Java设计模式之装饰者模式