设计模式之装饰模式

2017-06-12  本文已影响11人  老羊_肖恩

装饰模式定义

装饰模式(Decorator Pattern)是一种比较常见的设计模式,其定义如下:Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provides a flexible alternative to subclassing for extending functionality. 即:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子规则更为灵活。
装饰模式的通用类图如下:


Decorator.jpg

装饰模式的通用代码如下:

//抽象被装饰者,组建
public abstract class Component{
    //抽象方法
    public abstract void operate();
}

//具体被装饰者,组建
public class ConcreteComponent extends Component{

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

}

public abstract class Decorator extends Component{
    private Component component = null;
    
    //通过构造函数传递被装饰者
    public Decorator(Component component){
        this.component = component;
    }
    
    @Override
    public void operate(){
        this.component.operate();
    }
    
    //定义修饰方法
    protected abstract void decorate();
}

public class ConcreteDecorator1 extends Decorator{

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

    @Override
    protected void decorate() {
        System.out.println("ConcreteDecorator 1 decorate...");
    }
    
    @Override
    public void operate(){
        this.decorate();
        super.operate();
    }
    
}

public class ConcreteDecorator2 extends Decorator{
    
    public ConcreteDecorator2(Component component) {
        super(component);
    }
    
    @Override
    protected void decorate() {
        System.out.println("ConcreteDecorator 2 decorate...");
    }
    
    @Override
    public void operate(){
        super.operate();
        this.decorate();
    }
    
}

//客户端
public class DecoratorClient{
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        //第一次装饰
        component = new ConcreteDecorator1(component);
        //第二次装饰
        component = new ConcreteDecorator2(component);
        
        component.operate();
    }
}

代码运行结果如下:

ConcreteDecorator 1 decorate...
Component operate...
ConcreteDecorator 2 decorate...

装饰模式的应用

装饰模式的优点

装饰模式的缺点

装饰模式的使用场景

《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记。

上一篇 下一篇

猜你喜欢

热点阅读