1. 程式人生 > >工廠模式與建造者模式

工廠模式與建造者模式

工廠模式和建造者模式都屬於建立型模式,它對類的例項化進行了抽象,能夠使軟體模組做到與物件的建立和組織無關。

簡單工廠模式

專門定義一個類來負責建立其他類的例項,通常根據自變數的不同而返回不同的類的例項。

工廠類

	 public class MoblieFactor{
		 public  Mobile getMobile(String title) {
			 if(title.equals("nokia")) {
				 return new Nolia();
			 } else if(title.equals("motorola")) {
				 return new Motorola();
			 }else {
				 throw new Exception("no such moblie");
			 }
		 }
	 }

Nolia Motorola 都是Moblie介面的實現類。

主函式

	 public static void main(String[] args) {
		 MoblieFactor mf = new MoblieFactor();
		 Mobile m;
		 m = mf.getMobile("nokia");
	 }

優點 :外界可以直接建立具體產品物件的尷尬局面擺脫出來,僅僅需要負責使用就可以,而不必管這些物件是如何生產出來的

缺點:簡單工廠模式將全部建立邏輯都集中到一個工廠中,違背了高內聚的責任分配原則。並且當系統中具體的產品類不斷增多時,可能會不斷修改工廠類,違背了開閉原則。

工廠方法模式

相比較於簡單工廠模式,這裡通過抽象工廠來解決傳遞引數選擇產品的過程,並且產品的生成過程同樣被其對應的工廠所隱藏。通過以上措施,在一定程度上克服了簡單工廠模式的缺點。

	 /**
	  * 手機介面
	  * @author jiahua
	  */
	 public  interface Moblie{
		 //  TODO 
	 }
	 /**
	  * 手機工廠介面
	  * @author jiahua
	  */
	 public interface MobileFactor{
		 public Moblie productMobile();
	 }

實現類

	 public class Motorola implements Moblie {
		 // TODO
	 }
	 
	 public class Nokia implements Moblie {
		 // TODO
	 }
	 
	 public class MotorolaFactor implements MobileFactor {

		@Override
		public Moblie productMobile() {
			return new Motorola();
		}
	 }
	 
	 public class NokiaFactor implements MobileFactor {

		@Override
		public Moblie productMobile() {
			return new Nokia();
		}
	 }

主類:

	 public static void main(String[] args) {
		 MobileFactor mf = new MotorolaFactor(); // 需要什麼產品就創造什麼工廠
		 Moblie m;
		 m = mf.productMobile();
	 }

優點:能夠自主建立需要的產品物件,將建立過程的細節封裝在工廠內部。

            增加新產品時無需修改其他具體的工廠和具體類。

缺點:在新增新產品時,需要編寫新的具體產品類和對應的具體工廠。

抽象工廠模式

提供一個建立一系列相關或相互依賴物件的介面,而無需指定他們的具體類。

	 public abstract class ComputerFactor{
		 CPU cpu;
		 HardDisk hd;
		 MainBoard mb;
		 
		 public void show() {
			 //  利用傳進來的元件做事
		 }
	 }

CPU、 HardDisk、 MainBoard 都是產品的類介面。

抽象工廠的實現類

	 public class IBM extends ComputerFactor {
		 public IBM() {
			cpu = new AMD();
			hd = new Maxtor();
			mb = new MSIK7N2G();
		}
	 }

主類

	 public static void main(String[] args) {
		 IBM ibm = new IBM();
		 ibm.show();
	 }

賦值操作左邊都是 父類的內部變數即抽象工廠中變數。賦值操作右邊都是具體產品介面的實現類。

抽象工廠模式與工廠方法模式最大的區別在於:工廠方法模式針對的是一個產品等級結構,而抽象工廠模式則針對的是多個產品等級結構。

優點:抽象工廠模式同樣具備隔離具體類生成。並且當一個產品族中的多個物件設計成一起工作時,他能夠保證客戶端始終只使用同一個產品族中的物件。

缺點:再新增新的產品物件時,難以擴充套件抽象工廠模式以便產生新種類產品。

建造者模式

他是將一個複雜物件的構建與他的表示分離,使得同樣的構建過程可以建立不同的表示。


實現類



director類


主類


筆者曾在《深入淺出設計模式》書中看到這個建造者模式的例子,他與簡單工廠模式極為相似。簡單工廠類中的工廠被替換成了Director,邏輯判斷與生成同樣在該類中建立。可能不同的就是建造者模式中的建造物件的建造過程必簡單工廠模式中的產品建立過程更為複雜。

建造者模式將一個複雜物件的生成責任作了很好的分配。他把構造過程放到指揮者的方法中,把裝配過程放到具體建造者類中。

相關推薦

工廠模式建造模式 的個人理解,以及結合運用

學習了一段時間設計模式,就想分享一下自己的理解, 歡迎大家多多指點,指出不足之處哈 個人理解,工廠模式用於處理 如何獲取例項物件 問題,建造者模式用於處理如何建造例項物件 問題(好像是廢話。。。)。兩者應該可以結合起來,下面將以商店售賣手機這場景來描述。 工廠模式: 簡單

工廠模式建造模式

工廠模式和建造者模式都屬於建立型模式,它對類的例項化進行了抽象,能夠使軟體模組做到與物件的建立和組織無關。簡單工廠模式專門定義一個類來負責建立其他類的例項,通常根據自變數的不同而返回不同的類的例項。工廠類 public class MoblieFactor{ publ

四、原型模式建造模式詳解

5.原型模式 5.1.課程目標 1、掌握原型模式和建造者模式的應用場景 2、掌握原型模式的淺克隆和深克隆的寫法。 3、掌握建造者模式的基本寫法。 4、瞭解克隆是如何破壞單例的。 5、瞭解原型模式的優、缺點 6、掌握建造者模式和工廠模式的區別。 5.2.內容定位 1、已瞭解並掌握工廠模式的人群。 2、已瞭解並掌

對 橋接模式 的個人理解,以及 工廠方法模式建造模式 的結合運用

學習了一段時間設計模式,就想分享一下自己的理解, 歡迎大家多多指點,指出不足之處哈 橋接模式:以商店與手機為例子來描述,先從簡單的依賴關係說起 public interface Phone { /** 充電 **/ void charge(); /** 解鎖 *

【Unity3D23種設計模式建造模式(Builder)

產出 private 一個 gof 行為 並且 bstr reac 定義 GoF中定義: “將一個復雜的構建流程與它的對象表現分離出來,讓相同的構建流程可以產生不同的對象行為表現。” 建造者模式可以分為兩個步驟來實施: 1.將復雜的構建流程獨立出來,並將整個流程分成

關於工廠模式建造模式的理解

通常情況下java裡面建立一個物件都是直接使用new關鍵字,但是隨著對java理解的深入逐漸會接觸到設計模式,設計模式中關於物件建立的模式主要有兩種:工廠模式和建造者模式,在這篇博文中來探討一下這三種建立物件方式的理解,不當之處,望大家指正。 一、使用new關鍵字直接建立 假設我們有一個

創造類模式工廠方法模式VS建造模式

工廠方法模式注重的是整體物件的建立方法,而建造者模式注重的是部件構件的過程,旨在通過一步一步地精確構造創建出一個複雜的物件。我們舉個簡單例子來說明兩者的差異,如要製造一個超人,如果使用工廠方法模式,直接產生出來的就是一個力大無窮、能夠飛翔、內褲外穿的超人;而如果使用建造者模式

MyBatis原始碼分析之抽象工廠模式建造模式的應用

抽象工廠模式的應用 MyBatis原始碼的註釋不多,不過SqlSession倒是給了兩行註釋: /** * The primary Java interface for working with MyBatis. * Through this inter

Factory and Decorator (工廠模式裝飾模式)

我前面的博文已經講解了裝飾者模式,如果你對這個模式還不太瞭解,建議先去看一下裝飾者模式再來看 這篇工廠模式與裝飾這模式組合的組合模式。我還是以生產手機為例,只是這次生產手機我是通過工廠來生產的。 案例是這樣的。華為有兩款手機分別為PhoneI 與 PhoneII 由於某種原

設計模式之禪之建立類PK【工廠模式VS建造模式

設計模式之禪PK之建立類 建立類設計模式 建立類模式: 工廠方法模式 建造者模式 抽象工廠模式 單例模式 原型模式 建立者模式的功能: 提供物件的建立和管理職責 工廠方法模式、抽象工廠方法模

設計模式工廠模式建造模式

準備找工作那會看到了一本神書,《Head First 設計模式》,從此對設計模式有了很深的親睞,但是因為自己的專案經驗少的可憐,所以也基本沒有用過這些神一樣的方法,時間一長也就都忘乾淨了。現在工作了,師兄給了一個500M的程式碼,讓我吃透它。這期間真的有很多問題,很迷惑。忽

【大話設計模式】--建造模式VS裝飾模式/抽象工廠

裝飾模式?建造者模式?    建造者模式(Builder):    趣味理解:MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多鍾語言翻譯機,上面

【Python】工廠模式建造模式的區別

最近在看《精通Python設計模式(Mastering Python Design patterns)》, 剛剛看完建造者模式,由於和看完工廠模式隔的時間有點久,再加上兩者本來就很像,有點分不清了。 所以,今天又看了看這兩者,區分一下,加強下記憶,以便安心看後邊的設計模式

Java模式建造模式詳解

建造模式是物件的建立模式。建造模式可以將一個產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程生成具有不同的內部表象的產品物件。 產品的內部表象 一個產品常有不同的組成成分作為產品的零件,這些零件有可能是物件,也有可能不是物件,它們通常又叫做產品的內部表象。不同

設計模式建造模式及在jdk中的體現,建造模式工廠模式區別

# 0、背景 建造模式(Builder模式) 假如有一個需求:蓋房子,蓋房子過程是一致的:打樁、砌牆、封頂。但是房子是各式各樣的,最後蓋出來的房子可能是高樓或別墅。 根據直接的思路,不用設計模式思想,我們也許會: 1. 寫一個 CommonHouse 抽象類,然後裡面規定了打樁、砌牆、封頂三個方

2015-03-12---外觀模式建造模式(附代碼),觀察模式(附代碼),boost庫應用

思想 err map 函數 成功 each clu all 說我 今天白天主要看了boost庫的應用,主要是經常使用的一些庫,array,bind,function,regex,thread,unordered,ref,smartpointers庫,晚上看了看設計模式。

設計模式建造模式(Builder)

人的 做出 字體 存在 分享 定義 固定 也不會 抽象方法 一個人活到70歲以上,都會經歷這樣的幾個階段:嬰兒,少年,青年,中年,老年。並且每個人在各個階段肯定是不一樣的呀,我覺得可以說世界上不存在兩個人在人生的這5個階段的生活完全一樣,但是活到70歲以上的人,都經歷了這幾

【設計模式建造模式

object lan pat alt pri 創建對象 private 關心 turn 1、定義 1.1 標準定義 建造者模式( Builder Pattern) 也叫做生成器模式, 其定義如下: Separate the construction of a complex

設計模式建造模式 Builder

cli return over orb stat implement b- none rect 本質與使用場景 public interface AirShipBuilder { Engine builderEngine(); OrbitalM

《大話設計模式》——建造模式

多個 構圖 str 業務邏輯 clas 邏輯 add [] -1 建造者模式結構圖 角色:1、builder:建造者接口。定義了建造一個產品所必須的所有流程。所有的建造者都需要實現該類,以確保實現建造一個產品所需的流程。 2、concreteBuilder:具體建造者。每