装饰设计模式

2019-03-28  本文已影响0人  xuxhing

一、模式定义

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

二、模式类图

装饰设计模式类图.jpeg

三、示例代码

public interface Component
{
     public void operate();
}
public class ConcreteComponent implements Component
{
    public void operate() 
    {
        System.out.println("do something");
    }
}
public abstract class Decorator implements Component
{
    private Component component = null;
    public Decorator(Component component)
    {
        this.component = component;
    }
    public void operate() 
    {
        this.component.operate();
    } 
}
public class ConcreteDecorator1 extends Decorator
{
    public ConcreteDecorator1(Component component)
    {
        super(component);
    }
    private void method()
    {
        System.out.println("ConcreteDecorator1 method 修饰");
    }
    public void operate()
    {
        this.method();
        super.operate();
    }
}
public class ConcreteDecorator2 extends Decorator
{
    public ConcreteDecorator1(Component component)
    {
        super(component);
    }
    private void method()
    {
        System.out.println("ConcreteDecorator2 method 修饰");
    }
    public void operate()
    {
        this.method();
        super.operate();
    }
}
public class client
{
    public static void main(String[] args)
    {
        // 创建被装饰对象
        Component component = new ConcreteComponent();
        // 第一次装饰
        component = new ConcreteDecorator1(component);
        // 第二次装饰
        component = new ConcreteDecorator2(component);

        component.operate();
    }
}

四、模式优缺点

五、何时选用

上一篇 下一篇

猜你喜欢

热点阅读