Java设计模式笔记之装饰者模式

1.前言

装饰模式是结构型设计模式,从字面来理解这个模式,就如同人借用衣服等来装饰自己一样,不管装扮了什么样的衣服,人始终是人,(对象始终是不变的),只不过是装饰物在不断的改变。


2.定义

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

3.UML图

Java设计模式笔记之装饰者模式_第1张图片

Component:抽象组件。可以是接口或者抽象类。

ConcreteComponent:具体组件。装饰的具体对象。

Decorator:抽象装饰者。职责就是装饰我们的组件对象,内部一定要有一个指向组件对象的引用。多数情况下,该类设计为抽象类。

ConcreteDecorartorA/B:具体装饰者。

4. 代码模板

public abstract class Component {
    //
    abstract void operate();
}

public class ConcreteComponent extends Component {
    @Override
    void operate() {

    }
}

public abstract class Decorator extends Component{
    private Component mComponent;//持有一个Component对象的引用

    //必要的构造方法
    public Decorator(Component component) {
        mComponent = component;
    }

    @Override
    void operate() {
        mComponent.operate();
    }
}

public class ConcreteDecoratorA extends Decorator {

    protected ConcreteDecoratorA(Component component) {
        super(component);
    }

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

    //自定义的装饰方法A
    public void operateA(){

    }

    //自定义的装饰方法B
    public void opearateB(){

    }
}

        //构造被装饰的组件对象
        Component component = new ConcreteComponent();

        //根据组件对象构造装饰者对象A并调用
        Decorator decorator = new ConcreteDecoratorA(component);
        decorator.operate();


5.最后的几句话

装饰者模式比较好理解,但是要注意它与代理模式的不同。

区别1:装饰者模式是以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案;代理模式是给一个对象提供一个代理对象,并有代理对象来控制对原对象的引用。

区别2:装饰模式应该为所装饰的对象增强功能;代理模式对代理的对象施加控制,但不对对象本身的功能进行增强。


你可能感兴趣的:(Android学习中的笔记,java学习,Java设计模式学习)