設計模式之工廠模式

2021-10-24 14:54:43 字數 2907 閱讀 1243

簡介:

定義乙個建立物件的介面,讓子類覺得例項化哪一類。

簡單點來說把工廠和產品都定義為抽象類或者介面,只是定義而不做具體實現。

實現了具體的工廠(類)和產品(類)實現,而後由乙個client對工廠例項和產品例項產生依賴關係,也可以通過反射來實現。

說明:工廠方法針對的是產品族,而不是產品的結構等級。有別於抽象工廠方法;

優點:1.向客戶隱藏了具體產品類被例項化的細節。

2.基於工廠角色和產品角色的多型設計是工廠方法模式的關鍵。

3.加入新產品時,無需修改工廠介面和產品介面提供的介面,無需修改客戶端,具體工廠,具體產品。

缺點:1.新增新產品時,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,系統中類的個數將成對增加,一定程度上增加了系統的複雜度。有更多的類需要編譯和執行,增加系統額外開銷。

2.考慮系統的可擴充套件性,需要引入抽象層,在客戶端**中均使用抽象層進行定義,增加了系統的抽象性和理解的難度,且實現的實現的時候可能用到dom、反射等技術,增加了系統的實現難度。

3.有多少中產品,就需要建立多少個工廠,資源復用率較低。

適用場景

1.客戶端不需要知道具體產品類的類名。只需要知道所對應的工廠即可,具體的產品物件由對應的工廠類建立。可將具體工廠類的類名儲存在配置檔案或資料庫中。

2.通過其子類來指定建立那個物件。對於工廠類只需要提供乙個建立產品的介面,而由其子類來確定具體要建立的物件,利用物件導向的多型和黎克特制代換原則

注:黎克特制代換原則(**

相當於建立了乙個工廠類,對實現了同一介面的一些類,進行例項的建立

1.建立乙個共同的介面

public

inte***ce

eat

2.建立實現類

public

class

eatmian

implements

eat}

public

class

eatdami

implements

eat}

3.建立乙個吃飯的類(理解為工廠類)並進行測試

public

class

eatfan

elseif(

"dami"

.equals

(type)

)else}}

class

test

}

測試結果

吃的是面

是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。

**案例:

實現類不用變,把吃飯類(工廠類)改一下就可以

將上面的**做以下修改,修改 eatfan類,也可以和我一樣在建立乙個

public

class

eatfan1

public eat producedami()

}class

test

}

**執行結果

吃的是大公尺

將上面的多個工廠模式裡的方法設定為靜態的,不需要建立例項直接呼叫即可

public

class

eatfan2

public

static eat producedami()

}class

test1

}

執行結果

吃的是大公尺

總體來說,工廠模式適合:凡是出現了大量的產品需要建立,並且具有共同的介面時,可以通過工廠方法模式進行建立。在以上的三種模式中,第一種如果傳入的字串有誤,不能正確建立物件,第三種相對於第二種,不需要例項化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。

接下來請看**案列

public

inte***ce

sender

寫兩個實現類

public

class

mailsender

implements

sender

}

public

class

smssender

implements

sender

}

寫兩個工廠類

public

class

sendmailfactory

implements

provider

}

public

class

sendsmsfactory

implements

provider

}

在提供乙個介面

public

inte***ce

provider

接下裡寫乙個測試類進行測試

public

class

test

}

執行結果為

this is mailsender!

總結:其實這個類的好處就是,如果你現在想增加乙個功能:及時發資訊,只需要做乙個實現類,實現sender介面,同時做乙個工廠類,實現provider介面,就可以了無需去改動現成的**。這樣做擴充套件性比較好。

注:(抽象工廠模式參照的是其他部落格詳情請看:

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...

c 設計模式 之 工廠模式之 工廠模式

1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...