剛看到抽象工廠模式,發現抽象工廠模式是很想的,抽象工廠模式定義如下:為建立一組相關或相互依賴的物件提供乙個介面,而且不需要指定它們的具體類
抽象工廠模式的通用類圖如下:
每乙個模式都是針對一定問題的解決方案。抽象工廠模式與工廠方法模式的最大區別就在於,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式則需要面對多個產品等級結構
下面用乙個汽車製造的例子來說一下抽象工廠模式
汽車製造類圖如下:
汽車的製造主要有:發動機、輪胎、車門、座椅等等,本例之介紹發動機和輪胎的製造
現在要生產兩種車輛:寶馬和賓士,寶馬和賓士的發動機和輪胎都有各自的要求,所以提取抽象,即發動機engine和輪胎抽象類tire,具體的區別交由各自的實現類,根據抽象工廠模式的定義,既然存在不同的產品,那麼就需要不同的工廠負責生產。
具體**如下:
/**
* 發動機抽象類
* */
public abstract class engine
/**
*寶馬汽車的發動機
* */
public class bmwengine extends engine
/**
* 賓士汽車的發動機
* */
public class benzengine extends engine
/**
* 發動機工廠的抽象類
* */
public abstract class enginefactory
/**
* 寶馬發動機工廠類
* */
public class bmwenginefactory extends enginefactory
}
/**
* 賓士發動機的工廠類
* */
public class benzenginefactory extends enginefactory
}
/**
*汽車輪胎的抽象類
* */
public abstract class tire
/**
* 寶馬輪胎
* */
public class bmwtire extends tire
/**
* *賓士輪胎
*/public class benztire extends tire
/**
* 輪胎的抽象工廠類
* */
public abstract class tirefactory
/**
* 寶馬輪胎工廠類
* */
public class bmwtirefactory extends tirefactory
}
/**
* 賓士輪胎工廠類
* */
public class benztirefactory extends tirefactory
}
public class carengineer
if("benz".equalsignorecase(cartype))}}
抽象工廠模式的優點:
良好的封裝,客戶端不需要關心具體的實現類,客戶端只需要關注介面即可
抽象工廠模式的缺點:
不易擴充套件新產品,例如上面汽車製造的例子,如果現在增加乙個車門的製造,那麼我們需要定義乙個車門的抽象類,定義寶馬和賓士的車門實現類,增加車門的抽象工廠類,定義寶馬和賓士車門生產的工廠類,如果不止這兩種車呢?想想吧,我們需要寫多少類
抽象工廠模式 設計模式3之抽象工廠模式
工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...
設計模式之抽象工廠模式
目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...
設計模式之抽象工廠模式
定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...