Aha!設計模式 7 抽象工廠 6

2021-08-31 16:19:45 字數 1850 閱讀 5453

實 現

下面是實現abstract factor模式的一些有用技術:

1) 將工廠作為單件 乙個應用中一般每個產品系列只需乙個concretefactory的例項。因此工廠通常最好實現為乙個singleton(3.5)。

只有一句話,但是並沒有給出實現。為了說明這個問題,作者按照自己的理解,以前面提到的作業系統主題的例子為背景提供乙個實現。

類圖:

有關singleton設計模式的內容會在後續文章中詳細介紹,這裡先大概提一下。

themefactory中首先將建構函式和析構函式設成保護的,這樣使用者就沒有辦法直接構建和銷毀工廠物件。使用者構建和銷毀物件可以使用另外提供的兩個公開的靜態方法:getinstance和deleteinstance。sington模式就是通過這種方式保證同一時刻只有乙個物件存在的。

生成產品的createwindow和createscrobar兩個介面,大家應該已經很熟悉了。

標頭檔案

具體實現

標頭檔案的內容和類圖中一致,我們直接進入實現的部分。

首先觀察include語句部分,為了控制具象類的建立和銷毀,抽象類的實現包含了3個具象類的標頭檔案。一般來講這種感覺不怎麼好。這個問題可以解決,但是會比較繁瑣。這裡就不再深入討論了。

接下來是兩個靜態變數:instance用來儲存themefactory唯一的具象類例項;system_theme用來儲存系統的設定值。由於這是個演示程式,所以用這麼乙個變數來控制程式的執行。

getinstance**稍長,但內容不複雜:如果已經存在的工廠物件就是我們想要的具象類,就直接返回它,否則就將它銷毀。無論是原本就不存在具象工廠例項還是因為不符合要求而銷毀了已經存在的例項,都需要根據要求建立新的例項並返回。

其餘的**就更加簡單,這裡不再說明。

利用者**

首先請注意,這裡只包含了抽象類的標頭檔案。並且由於抽象類的標頭檔案中也沒有包含具象類的標頭檔案,所以具象類對利用者完全不可見。當系統的主題發生變化時,自動實現了具象工廠類的切換。

執行結果

注意觀察工廠的切換動作。

**

類圖

注:

本文中藍色粗體文字都引自《設計模式》一書。                       

Aha!設計模式 2 抽象工廠 1

設計模式 的前兩章分別介紹設計模式的概要和乙個應用例項。對於乙個設計模式的初學者來講,應該不大好理解。我們直接進入具體的設計模式。本文從抽象工廠模式說起。名稱 在物件導向的世界裡,名稱具有很重要的含義。名稱一旦明確了,職責和行為差不多也就定了 反之如果沒有辦法為乙個類,方法命名,往往就是職責和行為不...

Aha!設計模式 3 抽象工廠 2

動機 設計模式 引言中對於動機的說明如下 用以說明乙個設計問題以及如何用模式中的類 物件來解決該問題的特定情景。該情景會幫助你理解隨後對模式更抽象的描述。簡單地說 就是設計模式的應用例項。回到抽象工廠模式的動機。考慮乙個支援多種視感 look and feel 標準的使用者介面工具包,例如 moti...

Aha!設計模式 5 抽象工廠 4

結構 下圖為抽象工廠模式的類圖。這個類圖和前面出現過的類圖唯一的區別就是使用了更加抽象的類名。所以就不在重複說明了。這裡說說另乙個話題 畫類圖。抽象工廠模式的類圖可以按照以下步驟 當然不是絕對的 畫出 首先可以個畫出三個工廠類。為每個工廠類新增兩個產生產品的操作 方法。畫出兩個產品系列的繼承結構。新...