2022年1月26日 星期三

[Geroge]設計模式-工廠方法

工廠方法: 一抽象產品類派生出多個具體產品類; 一抽象工廠類派生出多個具體工廠類; 每個具體工廠類只能創建一個具體產品類的實例

即定義一個創建對象的介面(抽象工廠類), 讓其子類(具體工廠類), 決定實例化哪一個類(具體產品類), "一對一"的關係







工廠接口: 工廠接口是工廠方法的核心, 與調用者直接交互用來提供產品, 在實際編程中, 有時候也會使用一個抽象類來做為調用者交互的接口, 其本質上是一樣的

工廠實現: 在編程中, 工廠實現決定如何實例化產品, 是實現擴展的途徑, 需要有多少種產品, 就需要有多少個具體的工廠實現

產品接口: 產品接口的主要目的是定義產品的規範, 所有的產品實現都必須遵循產品接口定義的規範, 產品接口是調用者最關心的, 產品接口的定義優劣, 直接決定了調用者程式碼的穩定性, 同樣, 產品接口也可以用抽象類代替, 但要注意最好不要違反里氏替換原則

產品實現: 實現產品接口的具體類, 決定了產品在客戶端中的具體行為


例子:

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

沒有留言:

張貼留言

[leetcode] [KMP] KMP

ABCDABD... ABCDABF... 簡單的說, 傳統解兩字串匹配部分 可能會來個雙迴圈, 哀個比對, 當不匹配的時候, 會將下方列再後移1位 然後不匹配再後移 然而 如果像上放已經有4個屬於匹配的字串, 她就應該直接往後移四位來匹配, 而不是只移動1位 隱藏的思維是, 當...