設計模式 工廠方法 Factory Method

2022-07-18 04:57:10 字數 2015 閱讀 3937

簡述

工廠方法抽象工廠兩個設計模式很相似,很多人不了解兩者的區別(包括我)。等把這五個建立型模式都介紹完後,我們再做乙個總結。

功能定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個例項化延遲到其子類。這個定義是一本《設計模式手冊》的書中提到的,看起來很官方。

何處使用

當我們並不知道當前建立的物件到底屬於哪乙個類,或者希望乙個類由它的子類來指定它所建立的物件的時候,可以使用工廠方法。嗯,這樣的描述其實由來於《head first design pattern》這本書,這本書非常明確的描述了抽象工廠和工廠方法的區別,希望有興趣的朋友可以去看看。

或許這樣說還是很多人不太理解,可以這麼說工廠方法權力比較大,它像發號命令的老闆,經常會命令自己的子類做一些事情,他並不在乎他們如何去做這些事情,只要能夠滿足他當前的需求就可以。通常我們買手機時為了避免充電的麻煩,會購買乙個或兩個備用電池,很多人不會購買原廠出產的因為**會比較高,當然符合同樣機型的電池可以出自不同的廠家,他們會在電池的製作工藝或者使用材料上存在一些差異,但是不用擔心它們同樣符合這台手機的正常使用。也就是說工廠方法用來建立某一物件,但它不需要知道或者根本就不知道自己將要建立出什麼樣的物件,負責建立這一物件的是它的子類(看來它像老闆一樣指使員工去做事一樣)。

設計我們需要乙個抽象的產品類,如此一來就可以由它衍生出不同的產品。還需要乙個抽象的建立者類它可以通過工廠方法來建立產品,同樣由它也要衍生出來不同的具體建立者,通過重寫父類的工廠方法來建立各自的具體產品,從下面的 uml 圖可以看出來,具體的建立者類依賴於各自的產品類。這樣一來我們對各個類之間的關係有了一些了解,通過它們之間的關係就可以繪製出工廠方法的類圖

實現當知道要做什麼並且如何去做才能達成目標時,我認為實現起來就是時間的問題,下面是 baidu 到的一段**,稍作修改:

using system;

public class test

", product.gettype().name);

} }

}public abstract class product

public class concreteproducta : product

public class concreteproductb : product

public abstract class creator

public class concretecreatora : creator

}public class concretecreatorb : creator

}

由此看來要想實現我們的工廠方法我們必須要做到:

可以衍生並創造各自產品的建立者類

可以衍生不同產品的產品類

to be continued!@ design patterns

設計模式 工廠模式(Factory)

除了使用new關鍵字以外,還有更多製造物件的方法。new意味著在例項化乙個具體的類,所以物件的方法是準確的實現,而非抽象的方法定義。因此這樣一來 將會缺乏彈性。我們針對介面程式設計,可以隔離掉以後系統中可能發生的一大堆改變,如果 針對介面來寫,那麼對於乙個方法的實現將會是多種多樣的。當 使用大量具體...

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...

設計模式 工廠方法

設計模式 工廠方法 工廠方法與抽象方法 面向介面程式設計可以提高 的靈活性 可以橫向擴充 切忌不能使用面向實現的程式設計,這樣做不便於以後業務的擴充和 的靈活性。工廠方法 就是把 new class 的過程交給 factory來做.構造類的細節不需要我們知道。比如 構造乙個 list 我們可以這樣寫...