抽象工廠: 多個抽象產品類, 派生出多個舉體產品類, 一個抽象工廠類, 派生出多個具體工廠類, 每個具體工廠類可創建多個具體產品類的實例
即提供一個創建一系列相關或相互依賴對象的介面, 而無須指定他們的具體的類, 一對多的關係
抽象工廠模式是工廠方法的升級版本, 他用來創建一組相關或相互依賴的對象, 他與工廠方法的區別在於, 工廠方法模式是針對一個產品等級結構, 而抽象工廠模式則是針對多個產品等級結構, 在寫程式中, 通常一個產品結構為一介面或是抽象類, 也就是說, 工廠方法模式提供所有產品衍生自同一個介面或抽象類, 而抽象工廠模式所提供的產品則是衍生自不同的介面或抽象類
範例:
我們有一個抽象工廠IStore, 它生產一系列產品, 有薯條, 有烤雞, 而麥當勞, 德克士, 肯德基都是基於IStore創建出來, 我們用戶在使用的不關心它是哪家生產的, 我們只關心他們生產出來的產品, 比方說雞, 或是薯條, 這樣我們就把生產和產品完全分開, 同時我們解決了, 一個產品需要一個工廠生產, 這樣我們就需要非常多的工廠來生產產品, 我們產品有一系列的觀念的話, 一個工廠就能生產多種同系列的產品, 這樣就能獲得更好的擴展性
總結:
無論是簡單工廠模式, 工廠模式, 或是抽象工廠模式, 它們都屬於工廠模式, 在形式和特點上極為相似, 他們最終的目的都是為了解耦
在使用時我們不必去在意這個模式到底是工廠方法模式還是抽象工廠模式, 因為他們之間的演變常常琢磨不透, 你會發現明明使用工廠方法模式, 新需求來臨, 修改後加入一個新的方法, 類中產品變成不同等級中的產品系列, 它就變成抽象工廠模式, 而對於抽象工廠模式, 當減少一個方法使得提供產品, 不再是一系列產品, 它就變成工廠方法模式
所以在使用工廠模式時, 只需要關心降低耦合度的目的是否達到了
https://www.youtube.com/watch?v=cA-vt0Nf1nQ&list=PLGmd9-PCMLhb16ZxeSy00qUsBazXgJyfM&index=14
https://github.com/iw5420/geroge-design-pattern
沒有留言:
張貼留言