根據網易雲課堂Java開發課程學習
- 裝飾模式介紹
裝飾模式以對客戶透明的方式動態給一個對象附加上更多的責任。換言之,客戶並不會感到對象在裝飾前後有什麼不同。裝飾模式可以在不使用創造更多子類的情況下,將對象的功能進行擴充(Java中的IO流就是用的這種模式)。
- 裝飾模式中的角色:
1. 抽象組件(Componet)角色:給出一個抽象介面,以規範準備接收附加責任的對象。
說白了 定義一個介面
2. 具體組件(ConcreteComponent)角色:定義一個將要接收附加責任的類
執行個體化這個介面
3. 裝飾(Decorator)角色:持有一個(Component)對象的執行個體,並定義一個與抽象組件一致的介面。
調用介面,執行個體化一個對象
4. 具體裝飾(ConcreteDecorator)角色:負責給組件對象添加附加的功能。
繼承Decorator,給對象添加功能。 下面是簡單的代碼示範
定義一個介面,介面裡面有一個方法。
package com.test.decorate;public interface Component { public void doThingA();}
2.執行個體化這個介面
package com.test.decorate;public class ConCreateComponent implements Component { @Override public void doThingA() { System.out.println("do A Thing !"); }}
3.建立一個裝飾類:
package com.test.decorate;public class Decorator implements Component { private Component component = null; public Decorator(Component component) { this.component = component; } @Override public void doThingA() { component.doThingA(); }} 添加附加功能
package com.test.decorate;public class ConCreateDecorator extends Decorator { public ConCreateDecorator(Component component) { super(component); // TODO Auto-generated constructor stub } @Override public void doThingA() { super.doThingA(); doThingB(); } private void doThingB() { System.out.println("do B thing"); }}
再加一個功能:
package com.test.decorate;public class ConCreateDecorator1 extends Decorator { public ConCreateDecorator1(Component component) { super(component); // TODO Auto-generated constructor stub } @Override public void doThingA() { super.doThingA(); doThingC(); } private void doThingC() { System.out.println("do C thing"); }}