設計模式之裝飾模式

2021-08-29 19:41:28 字數 2379 閱讀 4836

[size=medium][color=blue]decorator模式在awt,swing,和流中比較常見,eg.用緩衝流來包裝低階流,用高階流再來包裝緩衝流.其典型的**如下:[/color]

[color=green]filewriter[/color] fw = [color=brown]new[/color] [color=green]filewrite[/color]("mydata.txt");

[color=green]bufferedwriter[/color] buff = [color=brown]new[/color] [color=green]bufferedwriter[/color](fw);

[color=green]printwriter[/color] [color=blue]out[/color] = [color=brown]new[/color] [color=green]printwriter[/color](buff);

[color=blue]out[/color].print(".......");

按照這個理解先給大家取個簡單的例子

[color=brown]package[/color] decorator;

[color=brown]public inte***ce[/color] [color=blue]壺[/color]

[color=brown]package[/color] decorator;

[color=brown]public class[/color] [color=green]水壺[/color][color=brown] implements [/color][color=darkblue]壺[/color]

}[color=brown]package[/color] decorator;

[color=brown]public class [/color][color=green]熱水壺[/color] [color=brown]implements [/color][color=blue]壺[/color]

[color=brown]public void[/color] 倒水()

}[color=brown]package[/color] decorator;

[color=brown]public class[/color] [color=green]咖啡壺 [/color] [color=brown]implements[/color] [color=darkblue]壺[/color]

[color=brown]public void[/color] 倒水()

}//....看到這大家也有點心理有數了吧,同樣可以在寫幾個加牛奶,加果汁的壺,你想裝什麼,倒出來的就經過包裝過的,我想這就是裝飾模式的思想所在.

[color=brown]package [/color]decorator;

[color=brown]public class[/color] [color=green]test [/color]

}[color=darkblue]//接一下寫個比較更程式性的例子 由於明天要去面試,所以接下來的**我不做過多的顏色處理,以後有空修改.另外本**需要log4j jar包和屬性檔案我都在附件中

package decorator.******;

public inte***ce imylogger

package decorator.******;

import org.apache.log4j.logger;

//封裝log4j,自定義乙個簡單的輸出資訊方法

public class mylogger implements imylogger

}//再包裝,對輸出資訊進行加密

package decorator.******;

public class encriptlogger implements imylogger

public void print(string msg)

public string encript(string s)

return sb.tostring();

}//以html格式輸出資訊

package decorator.******;

public class htmllogger implements imylogger

public void print(string msg)

public string htmlstring(string msg)

}//測試類

package decorator.******;

public class test

}[/color]

個人總結:通過這2個例子,我對decorator模式有了稍微的了解,無非是定義乙個總介面,然後有此衍生出來的類都實現這個介面,在類中都定義乙個帶有此介面型別的構造方法.[/size]

設計模式之裝飾設計模式

1.目的 動態擴充套件類的行為 開閉原則 對擴充套件開放,對修改關閉 2.要點 裝飾類和被裝飾類都實現同乙個介面或者繼承同乙個類 3.具體實現 被裝飾元件介面 被裝飾元件實現類實現 抽象類構建被裝飾元件實現被裝飾元件介面 裝飾類繼承抽象類 裝飾類 重寫抽象類方法 裝飾 4.例項 被裝飾類介面 pub...

設計模式之裝飾模式

有時如果需要對某乙個類增加乙個功能,可以使用繼承來實現。但是如果想要只是對某乙個物件來增加一項功能,則可能會用到裝飾模式。裝飾模式的主要作用是動態的給某乙個物件新增某些功能。如果此時使用繼承來新增功能時,會產生大量的子類,導致難以維護。裝飾模式的簡要類圖如下 其中 component為待增加功能 即...

設計模式之裝飾模式

template pattern 即模板模式 核心思想 產品不變的部分首先實現,將易變的部分抽象出來供子類完成。例如 一雙運動鞋大體製作流程各廠家基本一致,但是各環節實現細節可有些不一樣,不一樣的部分抽象出來讓不同廠家實現。即先有個框架,細節交給不同廠家實現 程式設計例項 趙本山小品中提到的將大象裝...