本來不想寫這篇文章的,應該是不想寫工廠模式,因為基本大家都會,不過今天看到乙個老鐵的部落格, 關於抽象模式的實現,寫得不錯,看了幾遍之後,有了點自己的想法,隨便再熟悉一下工廠模式,於是就有了這篇文章,主要是抽象工廠,引用下老鐵的例子:咖啡工廠做大做強,引入了新的飲品種類:茶、碳酸飲料。中國工廠僅能製作咖啡和茶,美國工廠僅能製作咖啡和碳酸飲料
我這裡建立乙個抽象工廠,中國工廠和美國工廠繼承它。再建立乙個飲料介面,實現各種飲料種類。再建立乙個提供者,根據具工廠和種類提供對應的產品
建立乙個抽象工廠
/**
* @program:hope
* @author:aodeng
* @create:2018-11-22 14:43
* 抽象工廠
**/public abstract class abstractdrinksfactory
中國工廠和美國工廠繼承它
public class chinaabstractdrinksfactory extends abstractdrinksfactory else if ("tea".equals(whatyoulike))
return drink;
}}//
public class usaabstractdrinksfactory extends abstractdrinksfactory else if ("sodas".equals(whatyoulike))
return drink;
}}
再建立乙個飲料介面
//飲料介面
public inte***ce drink
實現各種飲料種類
//咖啡飲料
public class cofferdrink implements drink
}//碳酸飲料
public class sodasdrink implements drink
} // 茶飲料
public class teadrink implements drink
}
再建立乙個提供者,更具工廠和種類提供對應的產品
* 工廠提供者
**/public class drinkstore
/***
* 根據產品型別生產
* @param whatyoulike
* @return
*/public drink createdrink(string whatyoulike)
}
main方法測試
/**
* @program:hope
* @author:aodeng
* @create:2018-11-22 15:07
**/public class main
}
簡單工廠和抽象工廠有些區別,除了結構上的區別,主要區別在於使用場景不同。
**簡單工廠用於建立單一產品,將所有子類的建立過程集中在乙個工廠中,如要修改,只需修改乙個工廠即可。簡單工廠經常和單例模式一起使用,例如用簡單工廠建立快取物件(檔案快取),某天需要改用redis快取,修改工廠即可。抽象工廠常用於建立一整個產品族,而不是單一產品。通過選擇不同的工廠來達到目的,其優勢在於可以通過替換工廠而快速替換整個產品族。例如上面的例子美國工廠生產美國drink,中國工廠生產中國drink。優點客戶端與具體要建立的產品解耦,擴充套件性和靈活性高**
**缺點增加要建立的物件時,需要增加的**較多,會使系統變得較為複雜**
抽象工廠模式 設計模式3之抽象工廠模式
工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...
設計模式之抽象工廠模式
目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...
設計模式之抽象工廠模式
定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...