簡體中文 | 繁體中文

大話設計模式-----第121章


迷糊寶貝狠狠宅 冠蓋六宮 大漠歡顏 紅妝裹沙場:青衣天下 三界至尊 冒牌丹鍊師 蒼天 風流霸主:妖豔天下 魔藝人生 寵婚之狐狸不是妖 天狼刀 冷帝纏歡:愛妃,束手就寢 元霸異世遊 行屍走肉之末世倖存者 查理九世之夢之都 絕密特種Ⅱ西南獵鷹 迷情心動時 魂牽於心 坎坷風雨路 石田衣良作品2:計數器少年
第121章

給了我們怎樣的設計思路小A:“建立型模式抽象了物件例項化的過程,它幫助系統不依賴於物件如何建立,如何實現,何時建立。個類建立型模式使用繼承使物件建立多樣化,一個物件建立模式將物件的建立代理到其他類。那抽象工廠模式是為了解決什麼問題的呢?會給我們怎樣的設計思路?師兄。”

大B:“軟體開發中我們經常會碰到一系列相關的物件需要建立,如果按照常規做法我們就要為不同的物件建立編寫不同的程式碼,複用性和可維護性都降低了。而且這些相關物件建立的方式也許不同,那麼客戶程式碼建立的時候就要針對不同的物件編碼,物件建立的方式還是一個容易改變的地方。基於這樣的情況提出了抽象工廠模式,抽象工廠模式為建立一系列相關物件提供了統一的介面,客戶只要呼叫這個介面即可,封裝了變化,隔離了變化,讓客戶程式碼穩定起來。 比如這樣一個情況,我們做了一個桌面軟體,這個軟體的介面是可以改變的,它有幾種風格:XP風格、Win2000風格、蘋果機風格。這個軟體就是顯示一個視窗,視窗有標題欄、捲軸,XP風格的介面有它自己的標題欄和捲軸,而蘋果機風格的又不一樣。”

大B:“我們常常這樣做?”

switch(type)

{

case“XP”:

setTitle(newXPTitle());

setScrollbar(newXPScrollbar());

break;

case“win2000”:

setTitle(newwin2000Title());

setScrollbar(newwin2000Scrollbar());

break;

case“macos”:

setTitle(newmacosTitle());

setScrollbar(newmacosScrollbar());

break;

}

小A:“這樣做有什麼壞處呢?”

大B:“這個例子太小實際上沒有什麼壞處,這樣寫可以。但是人總會出錯,你看看下面這個。”

case“win2000”:

setTitle(newwin2000Title());

setScrollbar(newXPScrollbar());

break;

大B:“你的介面將是Win2000的標題欄,XP風格的捲軸,這就造成了不一致性抽象工廠就是為了解決這種一系列相關物件建立工作的。)抽象工廠的類圖。”

大B:“在上面這個例子中標題欄和捲軸都是我們的產品,我們還應該寫一個WindowManager類,專門來管理這些產品的建立的,而我們的WinXP團隊、Win2000團隊、蘋果機團隊實現這個WindowManager,WinXP團隊只會製造出XP風格的產品。”

推薦小說