讀書筆記6 工廠方法模式

2021-09-03 08:48:21 字數 1757 閱讀 2291

1、概念

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法是乙個類的例項化延伸到子類。

2、背景

已經知道工廠模式,有乙個父類superclass,以及這個父類的不同實現方法和演算法的若干個子類classa,classb... ...,有乙個工廠類daofactory,根據客戶端傳來的標識決定呼叫哪個子類。如下:

using system;  using system.collections.generic;  using system.text;    namespace factorypattern        public class classa:superclass            }      public class classb : superclass            }        public class daofactory                    return super;          }      }  }
客戶端

using system;  using system.collections.generic;  using system.text;    namespace factorypattern        }  }
結果

可以看出,簡單工廠模式是把到底例項化哪個類的邏輯放在工廠裡判斷,客戶端不需要知道呼叫的哪個類,只關心結果就可以了。但是這裡有乙個問題,如果需求有了變化。那麼就要增加新的類classc,classd… … 增加類不影響程式是可行的,但工廠類中的switch分支要不斷地加,也就是要不斷修改daofactory類,不符合開放封閉原則(程式實體可以擴充套件,但不被修改)。那麼如何解決?

3、工廠方法模式

根據問題,可以有這樣的方案,類classc,classd照常增加,但是需要修改工廠類。

using system;  using system.collections.generic;  using system.text;    namespace factorypattern          public class classa:superclass              }      public class classb : superclass            }         public class classc : superclass            }        public class classd : superclass            }        public inte***ce ifactory              public class afactory : ifactory            }        public class bfactory : ifactory            }        public class cfactory : ifactory            }      public class dfactory : ifactory            }  }
客戶端

using system;  using system.collections.generic;  using system.text;    namespace factorypattern        }  }
結果

這樣,解決了修改分支的問題。但是把選擇交給了客戶端,需要客戶端自己判斷到底需要呼叫哪個類實現,如果需求變化客戶端就需要修改。事物都是具有兩面性的,因此到底使用哪種模式還需要在程式中視情況而定。

讀書筆記6 工廠方法模式

1 概念 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法是乙個類的例項化延伸到子類。2 背景 已經知道工廠模式,有乙個父類superclass,以及這個父類的不同實現方法和演算法的若干個子類classa,classb.有乙個工廠類daofactory,根據客戶端傳來的標識決定呼叫哪個...

設計模式讀書筆記(七) 工廠方法模式

模式定義 工廠方法模式 factory method pattern 又名工廠模式,虛擬構造器 virtual constructor 模式 多型工廠模式 polymorphic factory 模式,它屬於類建立型。在該模式中工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體產品物件...

讀書筆記 《大話設計模式》工廠方法模式

工廠方法模式,又稱工廠模式 多型工廠模式和虛擬構造器模式,通過定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件。工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。下圖為計算器程式的工廠方法模式的uml圖結構 下面為計算器程式的...