1.模式描述
提供乙個用於建立物件的介面(工廠介面),讓其實現類(工廠實現類)決定例項化哪乙個類(產品類),並且由該實現類建立對應類的例項。
2.模式作用
可以一定程度上解耦,消費者和產品實現類隔離開,只依賴產品介面(抽象產品),產品實現類如何改動與消費者完全無關。
可以一定程度增加擴充套件性,若增加乙個產品實現,只需要實現產品介面,修改工廠建立產品的方法,消費者可以無感知(若消費者不關心具體產品是什麼的情況)。
可以一定程度增加**的封裝性、可讀性。清楚的**結構,對於消費者來說很少的**量就可以完成很多任務作。
等等。//todo
另外,抽象工廠才是實際意義的工廠模式,工廠方法只是抽象工廠的乙個比較常見的情況。
3.適用場景
消費者不關心它所要建立物件的類(產品類)的時候。
消費者知道它所要建立物件的類(產品類),但不關心如何建立的時候。
等等。//todo
例如:hibernate裡通過sessionfactory建立session、通過**方式生成ws客戶端時,通過工廠構建報文中格式化資料的物件。
4.模式要素
提供乙個產品類的介面。產品類均要實現這個介面(也可以是abstract類,即抽象產品)。
提供乙個工廠類的介面。工廠類均要實現這個介面(即抽象工廠)。
由工廠實現類建立產品類的例項。工廠實現類應有乙個方法,用來例項化產品類。
5.類圖
以上引用自:
6.模式例項**
工廠介面
/**
* 工廠介面
* @classname: imyca***ctory
*/public
inte***ce
imyca***ctory
工廠實現類
/**
* 工廠實現類
* @classname: myca***ctory
*/public
class
myca***ctory
implements
imyca***ctory
else
if(name.
equalsignorecase
("bmw"))
else
if(name.
equalsignorecase
("audi"))
else
ca***ctory.
setcar
(car)
;return ca***ctory;
}}
存放屬性的實體
/**
* 存放屬性的實體
* @classname: car
*/public
class
carpublic
void
setname
(string name)
public string getcolor()
public
void
setcolor
(string color)
}
產品介面
/**
* 產品介面
* @classname: icar
*/public
inte***ce
icar
虛擬產品類
/**
* 虛擬產品類
* @classname: ca***ctory
*/public
abstract
class
ca***ctory
implements
icar
@override
public
void
setcar
(car car)
}
奧迪車
/**
* 奧迪車
* @classname: audicar
*/public
class
audicar
extends
ca***ctory
system.out.
println
("audi->"
+ car.
getname()
+"->"
+ car.
getcolor()
);}}
寶馬車
/**
* 寶馬車
* @classname: bmwcar
*/public
class
bmwcar
extends
ca***ctory
system.out.
println
("bmw->"
+ car.
getname()
+"->"
+ car.
getcolor()
);}}
五菱車
/**
* 五菱車
* @classname: wulingcar
*/public
class
wulingcar
extends
ca***ctory
system.out.
println
("wuling->"
+ car.
getname()
+"->"
+ car.
getcolor()
);}}
測試類
public
class
main
}
輸出 java設計模式 工廠模式
工廠模式 存在的目的 定義乙個用於建立複雜類的物件的介面。使用工廠模式,降低了類與類之間的耦合關係。分為三種實現方式 類之間的繼承結構不同 簡單工廠模式 工廠方法模式 抽象工廠模式。主要涉及的三種類 呼叫工廠的類,工廠類,產品類。先看乙個不適用工廠模式的類組織 class bmw32 class b...
JAVA設計模式 工廠模式
一 簡單工廠。它的缺點很明顯,當需要再新增乙個whitehuman類時,需要在工廠類中修改,則 的耦合性很高。建立需要用工廠new的class public inte ce human public class blackhuman implements human public class yel...
java設計模式 工廠模式
靜態工廠模式 為了建立物件而產生 1 有工廠類,有乙個可以根據需求返回建立的物件的方法 2 工廠類中的產生物件的方法的返回值型別是 父類的型別,產生的物件都是子類物件 3 強調 工廠類中的方法的返回值和返回的物件中存在著向上轉型的關係 public class cloth public class ...