設計模式總綱——抽象工廠模式

  話說,上次小陳自從把生產線從小做坊換成中大型工廠以後,業績是一日千里,小陳更是財源滾滾,訂單是一件接着一件,正直NBA火熱,特別是NBA系列的產品賣得至關火熱,這時有件事情讓小陳犯難了,由於在這邊,小陳目前的生產線只是進行單一的進行生產,隊徽工廠生產着隊徽,球衣工廠生產的球衣,球鞋工廠生產着球鞋,而小陳在業績提升的同時,他對業績進行了大數據分析,他發現了,購買了騎士隊隊徽的人有99.99999%的人會購買騎士隊服,和印有騎士隊標的球鞋,同理購買了雷霆隊徽的人也會購買雷霆隊的隊服和雷霆隊的籃球。架構

  這讓小陳頭疼的是,由於工廠生產的產品單一而且分散,每次進行發貨的時候,都要等待他們從不一樣的地方運到店裏,而後由店員進行組裝,這樣,不只耗時,並且小陳的人力成本也蹭蹭蹭的往上漲,這不,小陳的員工又開始向小陳抱怨了,「陳總,你看咱們天天都要組裝將近1萬套的產品,員工已經都累得要死要活了,不少人都打算辭職不幹了,你趕忙給想一想辦法吧。」,小陳這時候急的焦頭爛額,趕緊給一線人員升值加薪,才暫時安撫住了他們的情緒。ide

  這時候,小陳也聯繫了工廠的主管,向他述說了目前的苦衷,詢問有沒有更好的辦法。這時他們的主管向小陳說:「你這種問題之前咱們早就遇到了,咱們確定已經早已作好了預案了,像咱們公司總部那邊對於一系列的套裝產品的話,好比像,一個產品族的產品都遷移到同一個工廠生產,並進行組裝,相似球鞋,球衣,籃球就屬於一類產品,不一樣的產品族對應着不一樣的工廠,來,我來給你看一下,咱們工廠中,對於產品族工廠的架構圖。」而後工廠的主管就給小陳傳了一張產品族生產工廠的架構圖。大數據

「你看,若是要生產一系列的產品族產品的話,只須要把產品生產線放在一塊兒就能夠了。」,如今咱們來看看具體的產品線的模板代碼:好比咱們此次要來生產一套騎士隊的產品和雷霆隊的產品,產品暫時就包含了隊徽和球鞋spa

一、一個抽象接口,專門用來生產隊徽和球鞋的,可是具體的實現交給下面的子工廠。code

1 public interface AbstractFactory {
2     public AbstractProduct createBadge();
3     
4     public AbstractProduct createShoes();
5 }

二、產品生產的圖紙,這裏只包含的具體產品的信息,若是須要有特定的方法,則自行進行添加。blog

1 public interface AbstractProduct {
2     public void productInfo();
3 }

三、克利夫蘭和雷霆的產品工廠,專門生產克利夫蘭騎士隊的隊徽和球鞋和雷霆隊的隊徽和球鞋接口

 1 public class CavalierProductFactory implements AbstractFactory{
 2     @Override
 3     public AbstractProduct createBadge() {
 4         return new CavalierBadge();
 5     }
 6 
 7     @Override
 8     public AbstractProduct createShoes() {
 9         return new CavalierShones();
10     }
11 }
 1 public class ThunderProductFactory implements AbstractFactory{
 2 
 3     @Override
 4     public AbstractProduct createBadge() {
 5         return new ThunderBadge();
 6     }
 7 
 8     @Override
 9     public AbstractProduct createShoes() {
10         return new ThunderShoes();
11     }
12 }

而上面的隊徽和球鞋則實現自AbstractProduct接口,取其中一例便可。get

1 public class CavalierBadge implements AbstractProduct{
2     @Override
3     public void productInfo() {
4         System.out.println("This is a Cavalier Badge!");
5     }
6 }

如今兩個工廠就能夠開始各司其職的實現他們對應的產品了,像上篇文章所述,咱們能夠把對應的工廠寫到具體的配置文件中,而後根據反射來進行實現具體的工廠。數據分析

 1     @Test
 2     public void client() {
 3         CavalierProductFactory cavalierFactory = (CavalierProductFactory)XMLUtils.getFactory("CavalierProductFactory");
 4         ThunderProductFactory thunderFactory = (ThunderProductFactory)XMLUtils.getFactory("ThunderProductFactory");
 5         
 6         AbstractProduct cavalierBadge = cavalierFactory.createBadge();
 7         AbstractProduct cavalierShoes = cavalierFactory.createShoes();
 8         
 9         AbstractProduct thunderBadge = thunderFactory.createBadge();
10         AbstractProduct thunderShoes = thunderFactory.createShoes();
11     }

這樣的話咱們就能夠生產對一一對應的產品族了。產品

小陳看了一下,很開心,這樣的話就能夠節省不少本身的人力成本了。產品又都分紅了一類,可是小陳轉念一想,若是單單生產不一樣球隊的產品就須要一個工廠的話,那樣的話成本太大了,每次都要新建一個工廠,主管默默的點了點頭,說道:

「固然了,若是更細分的話,其實騎士隊的隊徽和球鞋和雷霆的隊徽和球鞋是屬於同一個大類,這樣的話,咱們能夠再在工廠內部加分支來進行選擇,那樣的話,只須要使用一個工廠的產品就能夠了,這樣的話,咱們的生產線就不規範了,就會變成小做坊的工做模式了,可是有時候咱們也會爲了成本,不產生太多沒必要要的工廠來進行這種工做模式,因此說,看看到底是爲了擴展性來拓展產品好,仍是爲了減小成本(類的膨脹),不過有時候在咱們開始建造工廠的時候都會先考慮生產的規模(工程規模)來擇優,或者居中選擇。」

小陳聽了,陷入了沉思,看來企業要作大作強也不容易啊,考慮的東西要到方方面面啊,不過如今既然我天天的產品已經達到了 十萬/天 的銷量的話,那我先抓緊鋪貨了,就先拓展些工廠,增長產品,開始開搞了。小陳在本身的商業之路又邁出了堅實的一步,日後小陳又會在商業之路上遇到什麼波折呢?

  欲知後事如何,且聽下文分解。

相關文章
相關標籤/搜索