學(xué)習(xí)《Android 源碼設(shè)計模式解析與實踐》系列筆記
介紹
裝飾模式,也稱包裝模式,結(jié)構(gòu)型設(shè)計模式之一埋泵。
定義
動態(tài)地給一個對象添加一些額外的職責(zé)控乾。就增加功能來說么介,裝飾模式相比生成子類更為靈活。
使用場景
需要透明且動態(tài)地擴展類的功能時蜕衡。
結(jié)構(gòu)
裝飾模式 UML 圖
- Component : 抽象組件壤短。接口或抽象類,被裝飾的原始對象慨仿。
- ConcreteComponent : 組件具體實現(xiàn)類久脯。
- Decorator : 抽象裝飾者,內(nèi)部需要有一個組件對象的引用镰吆。
- ConcreteDecorator : 具體的裝飾者類帘撰。
實現(xiàn)
人穿衣服,衣服為裝飾万皿。
/**
* 人的抽象摧找,對應(yīng)抽象的Component
*/
public abstract class Person {
public abstract void dressed();
}
/**
* 人的具體實現(xiàn)類核行,男孩,對應(yīng) ConcreteComponent 角色
*/
public class Boy extends Person {
@Override
public void dressed() {
System.out.println("穿上底褲");
}
}
/**
* 裝飾抽象類蹬耘,對應(yīng) Decorator 角色
*/
public class PersonCloth extends Person {
private Person mPerson;
public PersonCloth(Person person) {
mPerson = person;
}
@Override
public void dressed() {
mPerson.dressed();
}
}
/**
* 具體裝飾實現(xiàn)類芝雪,便宜裝扮
*/
public class CheapCloth extends PersonCloth {
public CheapCloth(Person person) {
super(person);
}
public void dressShorts() {
System.out.println("穿條短褲");
}
@Override
public void dressed() {
super.dressed();
dressShorts();
}
}
/**
* 具體裝飾實現(xiàn)類,豪華裝扮
*/
public class ExpensiveCloth extends PersonCloth {
public ExpensiveCloth(Person person) {
super(person);
}
private void dressShirt() {
System.out.println("穿件短袖");
}
private void dressLeather() {
System.out.println("穿件皮衣");
}
private void dressJean() {
System.out.println("穿件牛仔褲");
}
@Override
public void dressed() {
super.dressed();
dressShirt();
dressLeather();
dressJean();
}
}
public class Client {
public static void main(String args[]) {
Person boy = new Boy();
PersonCloth clothCheap = new CheapCloth(boy);
clothCheap.dressed();
PersonCloth clothExpensive = new ExpensiveCloth(boy);
clothExpensive.dressed();
}
}
總結(jié)
Android
源碼中综苔,Context
與 ContextImpl
的實現(xiàn)就是使用了裝飾模式惩系。
裝飾模式是對客戶端透明的方式擴展對象的功能,是繼承方式的一個替代方案如筛。
相關(guān)文章:
設(shè)計模式整理(1) 代理模式
設(shè)計模式整理(2) 單例模式
設(shè)計模式整理(3) Builder 模式
設(shè)計模式整理(4) 原型模式
設(shè)計模式整理(5) 工廠模式
設(shè)計模式整理(6) 策略模式
設(shè)計模式整理(7) 狀態(tài)模式
設(shè)計模式整理(8) 責(zé)任鏈模式
設(shè)計模式整理(9) 觀察者模式
設(shè)計模式整理(10) 適配器模式
設(shè)計模式整理(11) 裝飾模式
設(shè)計模式整理(12) 中介者模式