工廠方法: 一抽象產品類派生出多個具體產品類; 一抽象工廠類派生出多個具體工廠類; 每個具體工廠類只能創建一個具體產品類的實例
即定義一個創建對象的介面(抽象工廠類), 讓其子類(具體工廠類), 決定實例化哪一個類(具體產品類), "一對一"的關係
工廠接口: 工廠接口是工廠方法的核心, 與調用者直接交互用來提供產品, 在實際編程中, 有時候也會使用一個抽象類來做為調用者交互的接口, 其本質上是一樣的
工廠實現: 在編程中, 工廠實現決定如何實例化產品, 是實現擴展的途徑, 需要有多少種產品, 就需要有多少個具體的工廠實現
產品接口: 產品接口的主要目的是定義產品的規範, 所有的產品實現都必須遵循產品接口定義的規範, 產品接口是調用者最關心的, 產品接口的定義優劣, 直接決定了調用者程式碼的穩定性, 同樣, 產品接口也可以用抽象類代替, 但要注意最好不要違反里氏替換原則
產品實現: 實現產品接口的具體類, 決定了產品在客戶端中的具體行為
例子:
IStore是一個抽象類, 他返回是IChips也是抽象產品, 那後面IStore類的實現類, 當有需要的時候, 可以新增新的實現類, 抽象類的程式碼就不會動到了
優點:
1 在工廠方法中, 用戶只需要知道所要產品的具體工廠, 無須關心具體的創建過程, 甚至不需要具體產品類的類名
2 在系統增加新的產品時, 我們只需要添加一個具體產品類和對應的實現工廠, 無須隊員工廠進行任何修改, 很好地符合了"開閉原則"
缺點:
每次增加一個產品時, 都需要增加一個具體類和對象實現工廠, 使得系統中類的個數成倍增加, 在一定程度上增加了系統的複雜度, 同時也增加了系統具體類的依賴, 這並不是什麼好事
與簡單工廠的對比:
工廠方法模式是簡單工廠模式的延伸, 在工廠方法模式中, 核心工廠類不在負責產品的創建, 而是將具體的創建工作交給子類去完成, 也就是核心工廠僅僅只提供創建的接口, 具體實現方法交給繼承他的子類去完成
當我們的系統需要增加其他新的對象時, 我們只需要添加一個具體的產品和它的創建工廠即可, 不需要對原工廠進行任何修改, 這樣很好地符合了"開閉原則"
https://www.youtube.com/watch?v=cA-vt0Nf1nQ&list=PLGmd9-PCMLhb16ZxeSy00qUsBazXgJyfM&index=13
https://github.com/iw5420/geroge-design-pattern
沒有留言:
張貼留言