大话设计模式(五)之装饰者模式

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

这里首先举例一个场景,一个主功能和多个辅功能结合一起实现一个功能。

类图如下:


大概讲解一下,就是说首先定义一个统一接口,

而后定义多个(或一个)主功能,这里只是定义了一个KeyComponent,可以添加多个,实现本身功能。

然后定义一个抽象类,是所有辅功能的父类,在里面定义变量component,并写出变量的get,set方法。

最后定义具体辅功能的实现类,重写功能方法,并在实现方法后实现主功能的方法。

具体代码如下:

服务端:

public abstract class Component {
    abstract void show();
}
public class KeyComponent extends Component{

    @Override
    void show() {
        System.out.println("Key Class");
    }
}
public abstract class Decorator extends Component {
    protected Component component;

    public void setComponent(Component component) {
        this.component = component;
    }

    @Override
    void show() {
        component.show();
    }
}
public class DecoratorA extends Decorator{
    @Override
    public void show(){
        System.out.println("DecoratorA");
        component.show();
    }
}
public class DecoratorB extends Decorator{
    @Override
    public void show() {
        System.out.println("DecoratorB");
        component.show();
    }
}

客户端:

public class DecoratorTest {
    public static void main(String[] args){
        KeyComponent keyComponent=new KeyComponent();
        DecoratorA decoratorA=new DecoratorA();
        DecoratorB decoratorB=new DecoratorB();
        decoratorA.setComponent(keyComponent);
        decoratorB.setComponent(decoratorA);
        decoratorB.show();
    }
}

装饰的方法是:首先利用KeyComponent实例化对象keyComponent, 然后利用实例化的对象DecoratorA和DecoratorB来包装keyComponent,最后执行最终的装饰对象DecoratorB的show方法。

总结:

装饰者模式就是把类的核心职责(主要功能)和装饰职责(辅功能)区分开来实现,这样我们可以动态的去除或添加功能实现,实现动态修改功能职责的问题,而且这样还可以抽离出来辅助功能的重复代码。

阅读更多

没有更多推荐了,返回首页