工廠模式實現了建立者和呼叫者的分離
工廠模式分類:
1.簡單工廠模式
2.工廠方法模式:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類
物件導向設計的基本原則:
ocp(開閉原則,open-closed principle):
乙個軟體的實體應當對擴充套件開放,對修改關閉。也就是說如果你要對乙個已存在的系統做擴充套件的時候盡量要新增加類,而不是在原有的基礎上修改。
dip(依賴倒轉原則,dependence inversion principle)
針對介面程式設計,不要針對實現程式設計。
lod(迪公尺特法則,law of demeter)
只與你直接的朋友通訊,而避免和陌生人通訊。乙個類盡量少的依賴其他類
未使用工廠模式的情況
//汽車介面
public inte***ce car
//奧迪
public class audi implements car
}//比亞迪
public class byd implements car
}//汽車測試類
public class testcar
使用了簡單工廠模式後:可以建立乙個工廠類,該類中提供乙個建立汽車的工廠(方法)
//汽車工廠
public class ca***ctory else if ("byd".equals(type)) else}}
//測試簡單工廠方法
public class test******factorycar
}//工廠介面
public inte***ce ca***ctory
//建立比亞迪汽車的工廠
public class bydfactory implements ca***ctory
}//建立奧迪的工廠
public class audifactory implements ca***ctory
}//測試工廠方法
public class testfactorymethod
}抽象工廠模式用來生產不同產品族的全部產品,對於只增加產品某一部分則不適用。抽象工廠模式是工廠模式的一種公升級版本。
在有多個業務品種,業務分類時,抽象工廠能產品不同類別的乙個全部產品。例如:生產汽車,抽象工廠模式可以生產高階汽車全部配件來組成乙個高階汽車,
低端汽車全部配件來組成要給低端的汽車,但是不能產生乙個高階的發動機和乙個低端的座椅來組成乙個中等的汽車。這樣會混亂。
**實現:
首先使用乙個介面來定義乙個發動機,使用具體的類來定義發動機的好壞(具體實現)
/*** 發動機介面
*/public inte***ce engine
//好的發動機
class luxuryengine implements engine
@override
public void start()
}//差的發動機
class lowengine implements engine
@override
public void start()
}定義乙個汽車總工廠,用來生產各種型別的汽車。所有的汽車都需要依賴此工廠來生產汽車。
/*** 汽車總工廠,可以建立輪胎,座椅,發動機
*/public inte***ce ca***ctory
然後根據生產的不同產品,類建立具體的實現來生產汽車。例如:專門生產高階的汽車,專門生產低端的汽車。都可以用針對ca***ctory具體的實現來建立。
高階汽車製造工廠,所有汽車的生產必須依賴汽車總工廠
/*** 高階汽車製造工廠
*/public class luxuryca***ctory implements ca***ctory
@override
public seat createseat()
@override
public tyre createtyre()
}低端汽車製造工廠,所有汽車的生產必須依賴汽車總工廠
/*** 低端汽車製造工廠
*/public class lowca***ctory implements ca***ctory
@override
public seat createseat()
@override
public tyre createtyre()
}具體生產汽車的時候就可以根據需要來建立具體的汽車了。
public static void main(string args)
以上就是乙個針對產品族的工廠,用來生產乙個產品,而不是乙個配件。假如以後想生產乙個中端汽車產品。就可以增加相應的類,實現汽車總工廠ca***ctory來生產。
簡單工廠模式(靜態工廠模式)
雖然某種程度不符合物件導向規則(不符合開閉原則,每次新增內容都需要在原有**上修改),但是實際使用最多。
工廠方法模式
不修改已有類的前提下,通過增加新類來實現擴充套件。
抽象工廠模式
不可以增加產品中某乙個配件,可以增加乙個具體的產品族。
四、應用場景
jdk中的calendar的getinstance方法
jdbc中connection物件的獲取getconnection
hibernate中sessionfactory建立session
spring中的ioc容器建立管理bean物件的時候也是工廠模式
xml解析時的documentbuilde***ctory建立解析器物件
反射中class物件的newinstance方法。
factory工廠模式
1.factory模式 兩個重要的功能 1 定義建立物件的介面,封裝了物件的建立 2 使得具體化類的工作延遲到了子類中。factory模式僅僅侷限於一類類 就是說product是一類,有乙個共同的基類 如果我們要為不同類的類提供 乙個物件建立的介面,那就要用abstractfactory了。我們經常...
工廠模式Factory
工廠方法模式完全符合設計模式原則,降低了物件之間的耦合度,而且,工廠方法模式依賴於抽象的架構,將例項化的任務交由了子類實現.比如你想要出門,每次出行你都要根據天氣情況選擇出行方式,如果下雨天,就開自己的私家車,如果晴天就出門坐公車。那麼這裡可以抽取出乙個基類出來。車的基類 public abstra...
Factory 工廠模式
工廠模式有3種。以下的示例 都省略了建構函式與析構函式。一 簡單工廠模式 簡單工廠模式就是只有乙個工廠,所有的產品都有該工廠生產。每一種產品都有乙個對應的type。當需要某種產品時,將該產品的type傳給工廠,然後工廠即會返回該產品。這樣意味著工廠內部必須針對type作判斷,也就是使用乙個switc...