C#物件導向設計模式第三講:Abstract Factory Pattern 抽象原廠模式(建立型模式)

來源:互聯網
上載者:User

(根據MSDN Webcast相關課程整理)

new的問題:實現依賴,不能應對具體執行個體化類型的變化。(當執行個體對象發生變化時,無法滿足需求)

例:

當Road發生容易發生變化時,如有可能變成MudRoad時,需要修改系統中所有new 到Road的地方。

解決思路:

封閉變化點——哪兒變化封閉哪兒;如果new的類型比較穩定,基本沒有變化時,就不需要封裝啦。

建立的對象容易發生變化,因此就要封裝對象建立的過程。

面向介面編程:依賴介面,而不是依賴實現

將Road類抽象化,然後建立一系列不同類型的子類,並根據需要在CreateXX方面中執行個體化它們。好處:當需要變化時,不影響客戶程式,只需要修改類庫就可以了。

建立一系列相互依賴的對象

這種簡單工廠存在的問題:

不能應對“不同系列相系依賴的對象”的變化。如:不同風格的界 麵皮膚通常是一系列相系依賴對象的集合,當風格變化時,這一系列對象都應該隨之改變。

解決辦法:

還是封裝變化點。提供一種封裝機制來避免客戶程式和這種多個系統具體對象建立工作之間的緊耦合。

GOF:提供一個介面,讓該介面負責建立一系列“相關或者相互依賴的對象”,無需指定它們的具體的類。

ProductA和B分別具體1和2兩個系列,且系列內部的兩個產品相互依賴,它們通過ConcreterFactory1和2來執行個體化。客戶程式只需要操作類庫提供的三個介面就可以實現不同系列的產品的執行個體化。

使用抽象原廠模式的情況:

變化的是不同風格,不同系列的組合關係,而不是具體的產品對象發生增減或產品內部的各個部分。

《完》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.