定义
动静的给一个对象增加一些额定的职责。就减少性能来说,装璜模式比生成子类更加灵便。
在不用扭转原类文件和应用继承的状况下,动静地扩大一个对象的性能。
装璜者与被装璜者领有独特的超类,继承的目标是继承类型,而不是行为
装璜模式中,必然有一个最根本、最外围、最原始的接口或抽象类充当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 大厂面试题精讲视频】