設計模式 工廠模式

2021-09-26 02:34:20 字數 3842 閱讀 6247

平台

位址csdn

個人部落格

工廠模式是個統一的泛稱,具體可以分為:

其中,簡單工廠是種程式設計的習慣,並不是種設計模式。靜態工廠則是簡單工廠的一種變體,即使用靜態方法定義乙個簡單工廠,我們就稱之為靜態工廠.

工廠模式處理的是物件的建立的統一封裝問題。

場景描述

背景:

乙個工廠有個手機生產線,可以支援生產和組裝不同品牌的手機,不同的**商需要向工廠訂購不同數量、不同型別的手機。

初始問題:

不同手機的**商每次需要進不同品牌的手機。每次去找工廠的時候,都會 new 乙個新的手機出來。那麼m種品牌**商的話,如果在工廠都下訂單,工廠需要定義 m 個手機物件。如果某個品牌該**商暫時不使用了,但是其他**商還要使用,工廠就需要修改給**商提供手機的類。

對於這個問題,我們用靜態工廠來看下如何解決:

//抽象手機物件

@data

public

abstract

class

abstractphone

}//**商,**或是天貓等

public

class

******iphoneagent

}//靜態工廠

public

class

******phonefactory

return phone;}}

//iphone

public

class

iphone

extends

abstractphone

}//列舉類

@allargsconstructor

@getter

public

enum phonetype

測試

/**

* 簡單工廠

*/@test

public

void

testx1()

簡單工廠(靜態工廠),雖然不是真正的設計模式,但不失為乙個簡單的方法,可以將客戶程式從具體類解耦。

定義了乙個建立物件的介面,但是由子類決定要例項化的類是哪乙個。工廠方法模式是讓類把例項化推遲到子類。

在之前的場景下,我們有很多的**商都從同乙個工廠訂購手機。但是如果生產手機的工廠由於裝置老舊或是資金不足無法生產新型手機怎麼辦?

以生產新的iphone7和小公尺6手機為背景,我們來看下工廠方式模式怎麼實現的?

//抽象的手機**商類中宣告了乙個工廠方法,供子類實現具體的生產方式。

abstract

class

abstractagent

/** * 宣告工廠方法

* @param type

* @return

*/abstract abstractphone producephone

(phonetype type);}

//新的工廠

public

class

newphonefactory

return phone;}}

//京東**商選擇新的工廠來生產手機

public

class

jdagent

extends

abstractagent

}

測試

/**

* 工廠方法模式

*/@test

public

void

testx2()

抽象工廠模式提供乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類

顧名思義,抽象工廠就是把工廠通過介面或是超類抽象定義出來,以滿足不同手機的生產可以依賴不同工廠,但是對於呼叫方無感,只需要傳入對應的工廠例項即可。

之前提供一系列的靜態工廠例項類來直接實現**商所需手機的生產工作(如前文的******phonefactory、newphonefactory)。考慮到一旦工廠不再生產對應的手機了,我們就必須得修改多處**,乙個**商的在生產前的工廠呼叫,一是工廠例項內的switch選擇。

我們改造下上面的工廠方法模式,將工廠物件抽象出來,

//工廠的抽象介面定義

public

inte***ce

phonefactory

//富士康工廠定義

public

class

fushikangfactory

implements

phonefactory

return phone;}}

//**商基類補充工廠屬性定義(lombok自動生成了全參構造器和getter\setter方法)

@data

@allargsconstructor

@noargsconstructor

public

abstract

class

abstractagent

/** * 宣告工廠方法

* @param type

* @return

*/protected

abstract abstractphone producephone

(phonetype type);}

//新的**商蘇寧易購

public

class

suningagent

extends

abstractagent

/** * 宣告工廠方法

** @param type

* @return

*/@override

protected abstractphone producephone

(phonetype type)

}

測試

/**

* 抽象工廠模式

*/@test

public

void

testx3()

抽象工廠的介面定義中,還可以定義不同的產品系列,這是它相對於工廠方法模式,更容易擴充套件的地方。

工廠方法模式特點

抽象工廠模式特點

相同點

設計基礎

oo原則

《head first》讀書筆記

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

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...