讀書筆記6 工廠方法模式

2021-07-04 05:16:17 字數 2252 閱讀 8304

1、概念

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

2、背景

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

[csharp]view plain

copy

print?

using

system;  

using

system.collections.generic;  

using

system.text;  

namespace

factorypattern  

public

class

classa:superclass  

}  public

class

classb : superclass  

}  public

class

daofactory  

return

super;  

}  }  

}  

客戶端[csharp]view plain

copy

print?

using

system;  

using

system.collections.generic;  

using

system.text;  

namespace

factorypattern  

}  }  

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

3、工廠方法模式

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

[csharp]view plain

copy

print?

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  

}  }  

客戶端[csharp]view plain

copy

print?

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圖結構 下面為計算器程式的...