Factory Method工廠方法 建立型模式

2021-06-01 00:09:56 字數 2241 閱讀 4427

factory method --- 工廠方法

從耦合關係談起

耦合關係直接決定著軟體面對變化時的行為

--模組與模組之間的緊耦合使得軟體面對變化時,相關的模組都要隨之更改

--模組與模組之間的松耦合使得軟體面對變化時,一些模組更容易被替換或者更改,但其他模組保持不變

軟體需求的變化不應該是工程師抱怨的問題,而應該是工程師要解決的問題

主要的部分---抽象的高層部分---變化慢

細節的部分---具體的實現部分---變化快

細節依賴於主幹

動機(motivation)

在軟體系統中,經常面臨著"某個物件"的建立工作;由於需求的變化,這個物件具體實現經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面。

如何應對這種變化?如何提供一種"封裝機制"來隔離出"這個易變物件"的變化,從而保持系統中"其他依賴該物件的物件"不隨著需求改變而改變?

意圖(intent)

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使得乙個類的例項化延遲到子類。

結構

static

void

main(

string

args)

汽車模型

abstract

class

abstractcar

abstract

class

ca***ctory

--- 測試不同型別的abstractcar

class

cartestframwork

public

void

dotest(abstractcar car)

public

testdata gettestdata(abstractcar car)}//

hongqicar.cs

public

class

hongqicar : abstractcar

public

override

void

run(){}

public

override

void

trun(direction direction{}

public

override

void

stop(){}

}class

hongqica***ctory : ca***ctory}//

dongfengcar.cs --- 擴充套件,而不更改原來的結構

public

class

dongfengcar : abstractcar

public

override

void

run(){}

public

override

void

trun(direction direction{}

public

override

void

stop(){}

}class

dongfengca***ctory : ca***ctory}

factory method 應用於我在業務**中需要n個car()例項作為引數,而n又不確定,所以不能用傳入的方法,這樣子的話,n=3時我就得在業務邏輯之前加上

car c1 = new car();

car c2 = new car();

car c3 = new car();

但是n=5時呢?

所以我們在定義了乙個ca***ctory去管理例項的生成,這個的實現可以參考singleton模式的應用

factory method模式的幾個要點

·factory method模式主要用於隔離類物件的使用者和具體型別之間的耦合關係。面對乙個經常變化的具體型別,緊耦合關係會導致軟體的脆弱。

·factory method模式通過物件導向的手法,將所要建立的具體物件工作延遲到子類,從而實現一種擴充套件(而非更改)的策略,較好地解決了這種緊耦合的關係。

·factory method模式解決"單個物件"的需求變化,abstract factory模式解決"系列物件"的需求變化,builder模式解決"物件部分"的需求變化。

工廠模式(Factory Method

意圖 工廠方法模式 factory method pattern 工廠方法模式又稱為 工廠模式 也叫虛擬構造器 virtual constructor 模式或者 多型模式 屬於類的建立型模式。在工廠方法模式中,父類負責定義建立物件 的公共介面,而子類則負責生成具體的物件,這樣做的目的是將類的例項化操...

Factory Method(工廠模式)

定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。將產品的 實現 從 使用 中解耦 1.當乙個類不知道它所必須建立的物件的類的時候 2.當乙個類希望由它的子類來指定它所建立的物件的時候 3.當想將建立物件的職責委託給多個幫助子類中的某乙個,並且希望將哪乙個幫...

工廠方法(Factory Method)

為建立的物件定義乙個抽象類,雖然該抽象類負責建立物件,但由它的實現類決定哪個類需要例項化。即不在由單個工廠類決定應該例項化哪個子類。工廠類會將這決定推遲到每個子類中完成。product page 定義乙個由工廠方法例項化的物件介面。concreteproduct skillspage,educati...