乐趣区

关于android:Android入门教程-装饰者模式

定义

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

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

装璜模式中,必然有一个最根本、最外围、最原始的接口或抽象类充当 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 worker
Plumber do some work!
Hello,I am a B worker
Carpenter do some work!

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

退出移动版