設計模式 之抽象工廠模式

2021-08-28 17:37:43 字數 3522 閱讀 6653

創造型模式主要是為了例項化類所用。進一步又分為類建立、物件建立模式。

類建立模式主要基於繼承方式進行例項化

物件建立模式主要基於委託機制進行例項化

抽象工廠常常 基於 幾個類似的類中,建立指定的例項。目標

問題如果應用是可移植的,則需要封裝平台依賴關係。

將建立相似的或依賴的物件抽象出來而不是直接指定它們的建立類。

「factory」 物件負責提供建立物件的服務,client不需要直接建立物件。它們訪問factory獲取物件。

這種機制保證了交換「產品」變得容易,因為指定的類只需要出現一次—在初始化的時候。

應用可以通過例項化乙個不同的工廠來批量的替換大量的產品。

由於工廠物件物件的行為是非常普遍的,所以一般使用單例實現。

結構模式

乙個抽象工廠 abstractfactory 定義了乙個工廠方法。

每個工廠方法封裝了 new 操作。

抽象工廠的目的是為建立相關物件的系列提供乙個介面。

這種模式是在日本汽車製造中的鈑金沖壓裝置中發現的。

沖壓裝置是一家生產汽車車身零件的抽象工廠。同樣的機械用於沖壓右門,左手門,右前擋泥板,左前擋泥板,風帽等。

builder 模式側重於一步一步地構建複雜物件。

抽象工廠則強調一組或一類產品物件(簡單或複雜的)。

builder 在最後一步返回產品物件。

抽象工廠則會立即返回產品物件。

prototype 通過copy產生物件。

晶元製造商b可以製造cpu、mmu,且分別適用於的架構模式。亦即是說:

製造商可以製造 基於 ember 架構的cpu、mmu 、和基於 enginola 架構的cpu、mmu。

製造商擁有基於 ember 架構 的工具、 基於 enginola 架構 的工具,都能生產cpu、mmu。

於是對於使用者a而言,只需要告知廠商b,選擇需要製造 架構 ember 。

此時,根據選擇的架構通過抽象工廠得到相應的工具。

客戶a再根據工具選擇生產cpu還是mmu均可。

**示例如下:

package creational.absfactory;

/***

* @author byron

* @date

*/public

abstract

class

abstractcpu

package creational.absfactory;

/***

* @author byron

* @date

*/public

abstract

class

abstractmmu

package creational.absfactory;

/***

* @author byron

* @date

*/public

enum architecture

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

embertoolkit

extends

abstractfactory

@override

public abstractmmu createmmu()

}

package creational.absfactory;

/***

* @author byron

* @date

*/public

abstract

class

abstractfactory

return factory;

}/**

* to do

* @param

* @return

*/public

abstract abstractcpu createcpu()

;/**

* 建立乙個mmu

* @return

*/public

abstract abstractmmu createmmu()

;}

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

enginolatoolkit

extends

abstractfactory

@override

public abstractmmu createmmu()

}

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

enginolacpu

extends

abstractcpu

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

enginolammu

extends

abstractmmu

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

embercpu

extends

abstractcpu

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

embermmu

extends

abstractmmu

package creational.absfactory;

/***

* @author byron

* @date

*/public

class

client

}

抽象工廠模式 設計模式3之抽象工廠模式

工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...

設計模式之抽象工廠模式

目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...

設計模式之抽象工廠模式

定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...