JAVA中的設計模式二(工廠模式)

2021-09-20 01:10:00 字數 3845 閱讀 3090

工廠模式:主要用來例項化有共同介面的類,工廠模式可以動態決定應該例項化那乙個類。

工廠模式主要有:

簡單工廠模式,工廠方法,抽象工廠;

簡單工廠:

又叫靜態工廠,是工廠模式三中狀態中結構最為簡單的。主要有乙個靜態方法,用來接受引數,並根據引數來決定返回實現同一介面的不同類的例項。我們來看乙個具體的例子:

如下面價單的圖形

**如下:

首先我們先建立乙個抽象的產品:

1

package

factory;23

public

abstract

class

bmw

78 }

然後我們具體的產品類去繼承我們的抽象產品:

1

public

class bmw320 extends

bmw6}7

891011

12public

class bmw523 extends

bmw17 }

下面我們建立我們的工廠:

1

package

factory;23

public

class

factory else

if (type==523)else12}

13 }

下面就是客戶了,客戶需要產品,我們進行生產:

1

package

factory;23

public

class

customer

9 }

執行的結果如下-----:

這個就是簡單的工廠模式;

上面的**告訴我們,簡單工廠並不簡單,它是整個模式的核心,一旦他出了問題,整個模式都將受影響而不能工作,為了降低風險和為日後的維護、擴充套件做準備,我們需要對它進行重構,引入工廠方法。

工廠方法:

工廠方法其實就是,不同額工廠對應不同的產品,就算其中某乙個工廠不能正常工作了,也不會影響到其他的工廠工作;

首先我們先建立 產品介面和對應的具體產品

1

public

inte***ce

product 45

6public

class washer implements

product

1112}13

1415

16public

class aircondition implements

product

21 }

然後我們再建立 工廠介面和對應的具體生產不同商品的工廠

public

inte***ce

factory

public

class washe***ctory implements

factory

}public

class airconditionfactory implements

factory

}

最後就是顧客了,

1

package

factory2;23

public

class

customer

14 }

執行的結果為:

可以理解為:有了很多個工廠方法,自己需要哪乙個產品,就呼叫當前產品的工廠方法,獲取相應的具體例項。

從上面建立產品物件的**可以看出,工廠方法和簡單工廠的主要區別是,簡單工廠是把建立產品的職能都放在乙個類裡面,而工廠方法則把不同的產品放在實現了工廠介面的不同工廠類裡面,這樣就算其中乙個工廠類出了問題,其他工廠類也能正常工作,互相不受影響,以後增加新產品,也只需要新增乙個實現工廠介面工廠類,就能達到,不用修改已有的**。但工廠方法也有他侷限的地方,那就是當面對的產品有複雜的等級結構的時候,例如,工廠除了生產家電外產品,還生產手機產品,這樣一來家電是手機就是兩大產品家族了,這兩大家族下面包含了數量眾多的產品,每個產品又有多個型號,這樣就形成了乙個複雜的產品樹了。如果用工廠方法來設計這個產品家族系統,就必須為每個型號的產品建立乙個對應的工廠類,當有數百種甚至上千種產品的時候,也必須要有對應的上百成千個工廠類,這就出現了傳說的類**,對於以後的維護來說,簡直就是一場災難.....

抽象

方法:抽象工廠:意的意圖在於建立一系列互相關聯或互相依賴的物件。

我自己覺得抽象工廠是在工廠方法的基礎上引進了分類管理的概念....

工廠方法用來建立乙個產品,它沒有分類的概念,而抽象工廠則用於建立一系列產品,所以產品分類成了抽象工廠的重點,

我們繼續用上面的例子來說明:

工廠生產的所有產品都用都用大寫字母來標明它們的型號,比如冰箱,就有「冰箱-a",「冰箱-b",同樣,其他的產品也都是遵守這個編號規則,於是就有了一下產品家族樹

首先:我們創造不同的 電視和滑鼠的介面:

1

public

inte***ce

tv 345

public

inte***ce

mouse

然後我們創造冰箱和滑鼠的不同的品種:

1

public

class tv_a implementstv6

7}89

10public

class tv_b implements

tv1516}

1718

19public

class mouse_a implements

mouse

2425}26

2728

public

class mouse_b implements

mouse

3334 }

最後就等到了不同型別的工廠,生產不同型別的產品。如a工廠只生產a型別的產品

public

class factory_a implements

factory

@override

public

mouse createmouse()

}public

class factory_b implements

factory

@override

public

mouse createmouse()

}

最後就是測試類:

1

package

foctory3;23

public

class

customer

13 }

執行結果如圖所示:

java設計模式之二工廠模式

工廠模式主要用一下幾種形態 1 簡單工廠 factory 2 工廠方法 factory method 3 抽象工廠 abstract factory 又叫靜態工廠,是工廠模式三中狀態中結構最為簡單的。主要有乙個靜態方法,用來接受引數,並根據引數來決定返回實現同一介面的不同類的例項。我們來看乙個具體的...

java設計模式(二) 抽象工廠模式

例子背景 隨著客戶的要求越來越高,寶馬車需要不同配置的空調和發動機等配件。於是這個工廠開始生產空調和發動機,用來組裝汽車。這時候工廠有兩個系列的產品 空調和發動機。寶馬320系列配置a型號空調和a型號發動機,寶馬230系列配置b型號空調和b型號發動機。概念 抽象工廠模式是工廠方法模式的公升級版本,他...

JAVA設計模式二簡單工廠模式

一 簡單工廠模式 就是建立乙個工廠類,對實現了同一介面 或者繼承同一類 的一些類進行例項的建立。獲取例項的方法返回值為介面或父類物件 用到多型父類引用指向子類 物件 乙個模式使用了封裝繼承和多型 共同的實現介面 帶有傳送方法的傳送器介面 public inte ce sender 傳送郵箱的類 pu...