工廠模式:主要用來例項化有共同介面的類,工廠模式可以動態決定應該例項化那乙個類。
工廠模式主要有:
簡單工廠模式,工廠方法,抽象工廠;
簡單工廠:
又叫靜態工廠,是工廠模式三中狀態中結構最為簡單的。主要有乙個靜態方法,用來接受引數,並根據引數來決定返回實現同一介面的不同類的例項。我們來看乙個具體的例子:
如下面價單的圖形
**如下:
首先我們先建立乙個抽象的產品:
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最後就等到了不同型別的工廠,生產不同型別的產品。如a工廠只生產a型別的產品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 }
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...