設計模式讀書筆記 4

2021-03-31 08:56:59 字數 1257 閱讀 6282

2004-11-24

prototype模式

名稱:原型模式、

問題:

假設要做乙個圖形表示的五線譜編輯器,圖形來表示休止符、音符等,乙個選擇面板來控制、選擇**物件,例如,在面板上選擇乙個休止符,放置在五線譜上。我們為五線譜構成的**元素定義了抽象

graphics

類,為面板定義了抽象

tool

類,還為將一些圖形工具加入到五線譜而設計了

graphicstool類。

問題是,

graphics

類不知道如何建立五線譜等例項且加入到樂譜中去。如果為每乙個**物件類建立乙個

graphictool

類,那麼會產生大量的子類(不現實)。而實際上我們的子類是可以在另外的乙個類上進行少許修改即可滿足要求的。

解決: 讓

graphicstool

類通過拷貝

garphics

的方法來產生基於原來類的(原型)新的物件,將它轉殖和可以新增到文件中的原型作為引數。每乙個

graphics

子類都支援乙個

clone

操作,那麼

graphicstool

類就可支援建立全部

graphics

子類。

效果:

減少了產品物件類數量。可以在執行時刻增刪產品。

有效定義新類的行為,通過轉殖操作即可實現。某些環境中允許動態載入類。

缺點:每乙個類都要考慮如何實現

clone

操作,涉及到淺表和複雜轉殖。 圖:

singleton

單例模式

名稱:又名單件模式

問題:

很多情況下,我們需要在應用中確保某類僅僅有乙個物件可用。譬如,列印假離線系統,我們提交列印任務給假離線系統,而不是每乙個列印要面對新的列印物件,而是由列印系統排隊完成。

如何保證僅僅有乙個例項且易於訪問呢?

解決:

定義乙個建構函式,但是是保護的建構函式,且不帶構造引數。

定義乙個靜態成員(相當於全域性變數了),用於儲存單件模式物件。定義乙個靜態方法,例如

getinstance

,該方法會返回乙個唯一例項。此方法首先察看靜態成員是否被指向例項,如果沒有就呼叫保護構造生成乙個,否則就直接返回此靜態成員。

效果:

無論何時,都可以確保獲得乙個例項,且僅僅是單一例項。 圖:

以上5

種建立型模式,提供如何靈活建立物件,同時又可以面對靈活多變的物件需求。

設計模式讀書筆記

設計模式 就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受意想不到的破壞。對於擴充套件是開放的,對於更改是封閉的。無論模組是多麼的 封閉 都會...

大話設計模式讀書筆記4 模版方法模式

模板方法是一種常見的設計模式,它定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。uml圖 具體實現 namespace templatemethod public abstract class abstractclass...

設計模式讀書筆記 外觀模式

講的是如何將乙個介面轉換成客戶所需要的另乙個接 口,它的目的在於 解決介面的不相容性問題。現在這裡有這樣乙個模式,它的目的在於如何簡化介面,它可以將多個 類的複雜的一切隱藏在背後,只顯露 出乙個乾淨美觀的外觀。晚上睡覺之前,你總是喜歡看電視,在你進入臥室的時候你需要完成以下幾個步驟 開啟電燈 開啟空...