定义

动静的给一个对象增加一些额定的职责。就减少性能来说,装璜模式比生成子类更加灵便。
在不用扭转原类文件和应用继承的状况下,动静地扩大一个对象的性能。

装璜者与被装璜者领有独特的超类,继承的目标是继承类型,而不是行为

装璜模式中,必然有一个最根本、最外围、最原始的接口或抽象类充当Component 形象构件。

装璜模式的通用构造

Component              // 最根本的形象构件,接口或抽象类Operation()ConcreteComponent      // 具体的构件Decorator              // 形象的装璜者ConcreteComponent      // 具体的装璜者

优缺点和利用场景

长处

  • 装璜类和被装璜类能够独立倒退,不会耦合
  • 装璜模式是继承关系的一个代替计划
  • 装璜模式能够动静地扩大一个类(扩展性好)

毛病:多层的装璜是比较复杂的。

利用场景

次要场景就是能施展长处的中央

  • 扩大一个类的性能,或给一个类减少附加性能
  • 动静地减少或撤销一个类的性能
  • 须要为一批兄弟类进行改装或加装性能

代码示例

worker 示例

AWorker 称为装璜者 Plumber 称为被装璜者

先定义一个 Plumber,接着将其传入 AWorker 中;这样失去的是 AWorker-Plumber Carpenter 同理。这里装璜者的办法中调用的是传入对象的类的办法。

/** * Decoration test */public class Decoration {    public static void main(String args[]) {        Plumber plumber = new Plumber();        AWorker aWorker = new AWorker(plumber);        aWorker.doSomeWork();        Carpenter carpenter = new Carpenter();        BWorker bCarpenter = new BWorker(carpenter);        bCarpenter.doSomeWork();    }}interface Worker {    void doSomeWork();}class Plumber implements Worker {    public void doSomeWork() {        System.out.println("Plumber do some work!");    }}class Carpenter implements Worker {    public void doSomeWork() {        System.out.println("Carpenter do some work!");    }}class AWorker implements Worker {    private Worker tempWorker;    public AWorker(Worker worker) {        tempWorker = worker;    }    public void doSomeWork() {        System.out.println("Hello,I am a A worker");        tempWorker.doSomeWork();// use the Worker class method    }}// use temp Worker, avoid "this"class BWorker implements Worker {    private Worker worker;    public BWorker(Worker worker) {        this.worker = worker;    }    public void doSomeWork() {        System.out.println("Hello,I am a B worker");        worker.doSomeWork();    }}

输入:

Hello,I am a A workerPlumber do some work!Hello,I am a B workerCarpenter do some work!

【Android 零根底入门教程视频】
【Android 框架源码解析视频】
【Android 大厂面试题精讲视频】