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

2021-10-19 19:56:19 字數 4463 閱讀 6162

3. 工廠方法模式(factory method)

4. 抽象工廠(abstract factory)

其他博主:本質上不是設計模式,而是一種編碼方式

在建立乙個物件時不向客戶暴露內部細節,並提供乙個建立物件的通用介面。

簡單工廠把例項化的操作單獨放到乙個類中,這個類就成為簡單工廠類,讓簡單工廠類來決定應該用哪個具體子類來例項化。

這樣做能把客戶類和具體子類的實現解耦,客戶類不再需要知道有哪些子類以及應當例項化哪個子類。客戶類往往有多個,如果不使用簡單工廠,那麼所有的客戶類都要知道所有子類的細節。而且一旦子類發生改變,例如增加子類,那麼所有的客戶類都要進行修改。

以下的 client 類包含了例項化的**,這是一種錯誤的實現。如果在客戶類中存在這種例項化**,就需要考慮將**放到簡單工廠中。

public

class

client

else

if(type ==2)

else

// do something with the product

}}

以下的 ******factory 是簡單工廠實現,它被所有需要進行例項化的客戶類呼叫。

public

class

******factory

else

if(type ==2)

return

newconcreteproduct();}}

public

class

client

}

定義了乙個建立物件的介面,但由子類決定要例項化哪個類。工廠方法把例項化操作延遲到子類。

在簡單工廠中,建立物件的是另乙個類,而在工廠方法中,是由子類來建立物件。

下圖中,factory 有乙個 dosomething() 方法,這個方法需要用到乙個產品物件,這個產品物件由 factorymethod() 方法建立。該方法是抽象的,需要由子類去實現。

}提供乙個介面,用於建立相關的物件家族

提供乙個建立一系列相關或者互相依賴物件的介面,而無需制定它們具體的類。

抽象工廠模式建立的是物件家族,也就是很多物件而不是乙個物件,並且這些物件是相關的,也就是說必須一起建立出來。而工廠方法模式只是用於建立乙個物件,這和抽象工廠模式有很大不同。

抽象工廠模式用到了工廠方法模式來建立單一物件,abstractfactory 中的 createproducta() 和 createproductb() 方法都是讓子類來實現,這兩個方法單獨來看就是在建立乙個物件,這符合工廠方法模式的定義。

至於建立物件的家族這一概念是在 client 體現,client 要通過 abstractfactory 同時呼叫兩個方法來建立出兩個物件,在這裡這兩個物件就有很大的相關性,client 需要同時建立出這兩個物件。

從高層次來看,抽象工廠使用了組合,即 cilent 組合了 abstractfactory,而工廠方法模式使用了繼承。

}這樣設計的時候,當新定義了乙個oracle的database時,只需要改變一行**

databaseutils idatabaseutils2 =

neworacledatabaseutils()

;

將具體的實現型別改了就可以了,而不需要做其他的修改。

public

class

abstractproducta

public

class

abstractproductb

public

class

producta1

extends

abstractproducta

public

class

producta2

extends

abstractproducta

public

class

productb1

extends

abstractproductb

public

class

productb2

extends

abstractproductb

public

abstract

class

abstractfactory

public

class

concretefactory1

extends

abstractfactory

abstractproductb createproductb()

}

public

class

concretefactory2

extends

abstractfactory

abstractproductb createproductb()

}

public

class

client

}

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

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

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

典型的介面和實現類如下,我們要根據相應的需求建立出不同的物件。public inte ce animal public class catimplements animal public class dogimplements animal public class animalfactory el...

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

引言 最近發現一篇講解工廠模式比較簡易明了的文章,內容如下,原文連線為 簡單工廠模式 簡單工廠模式不是 23 種裡的一種,簡而言之,就是有乙個專門生產某個產品的類。比如下圖中的滑鼠工廠,專業生產滑鼠,給引數 0,生產戴爾滑鼠,給引數 1,生產惠普滑鼠。工廠模式也就是滑鼠工廠是個父類,有生產滑鼠這個介...