Decorator裝飾模式

2021-09-06 20:27:41 字數 1618 閱讀 5532

動態地給乙個物件增加一些額外的職責。就增加功能而言,decorator模式比生成子類更為靈活。

——《設計模式》gof

作用:在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。

比如,我們現在想設計乙個日誌類,記錄db日誌(或文字日誌),要求能夠對日誌的優先順序 和 錯誤級別進行記錄。

也就是對這個日誌類新增了記錄錯誤級別 和 優先順序的功能。後續還可能增加其他的功能。

public

inte***ce

log

public

class databaselog implements

log

}

public

class textfilelog implements

log

}

public

abstract

log

}

public

private

string errorlevel;

public

super

();

this.log =log;

}public

string geterrorlevel()

public

void

seterrorlevel(string errorlevel)

@override

public

void

write(string logcontent)

private

void

logerrorlevel(string errorlevel)

}

public

private

string priority;

public

super

();

this.log =log;

}public

string getpriority()

public

void

setpriority(string priority)

@override

public

void

write(string logcontent)

private

void

logpriority(string priority)

}

客戶端呼叫:

public

class

client

}

輸出結果:

優先順序:特別優先

錯誤級別:1級錯誤

記錄db-log:hello world!

因此,如果現在需要加乙個功能,我們只需要新增乙個功能的裝飾子類就可以了,不需要新增其它的子類。它好就好在擁有執行時的靈活性,可以在需要用時隨意組合功能,而不需要靜態地把各種功能組合寫死在**中。

裝飾模式 Decorator

裝飾模式 decorator 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。其中component定義了乙個物件介面,可以給這些物件動態的新增職責 concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責 decorator裝飾抽象類,...

Decorator 裝飾模式

定義 動態的給乙個物件新增一些輔助功能,而不改變原有的類。案例 假如現在有個文字控制項textview,它可以在螢幕上顯示文字,但當文字過多的時候,乙個螢幕顯示不下,這時就需要給它新增乙個滾動條。給乙個視窗加乙個滾動條不是原有的功能,而是額外的功能,比如還可以加乙個黑色外框,而且這些操作不是為某乙個...

裝飾模式 Decorator

裝飾模式 decorator 1.裝飾模式 decorator 的定義 又名包裝 模式,裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。2.裝飾模式以對客戶端透明的方式動態的給乙個物件附加上更多的責任。換言之客戶端並不會覺的物件在裝飾前和裝飾後有什麼區別。3.裝飾模式可以在...