話說,上次小陳自從把生產線從小做坊換成中大型工廠以後,業績是一日千里,小陳更是財源滾滾,訂單是一件接着一件,正直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 }
這樣的話咱們就能夠生產對一一對應的產品族了。產品
小陳看了一下,很開心,這樣的話就能夠節省不少本身的人力成本了。產品又都分紅了一類,可是小陳轉念一想,若是單單生產不一樣球隊的產品就須要一個工廠的話,那樣的話成本太大了,每次都要新建一個工廠,主管默默的點了點頭,說道:
「固然了,若是更細分的話,其實騎士隊的隊徽和球鞋和雷霆的隊徽和球鞋是屬於同一個大類,這樣的話,咱們能夠再在工廠內部加分支來進行選擇,那樣的話,只須要使用一個工廠的產品就能夠了,這樣的話,咱們的生產線就不規範了,就會變成小做坊的工做模式了,可是有時候咱們也會爲了成本,不產生太多沒必要要的工廠來進行這種工做模式,因此說,看看到底是爲了擴展性來拓展產品好,仍是爲了減小成本(類的膨脹),不過有時候在咱們開始建造工廠的時候都會先考慮生產的規模(工程規模)來擇優,或者居中選擇。」
小陳聽了,陷入了沉思,看來企業要作大作強也不容易啊,考慮的東西要到方方面面啊,不過如今既然我天天的產品已經達到了 十萬/天 的銷量的話,那我先抓緊鋪貨了,就先拓展些工廠,增長產品,開始開搞了。小陳在本身的商業之路又邁出了堅實的一步,日後小陳又會在商業之路上遇到什麼波折呢?
欲知後事如何,且聽下文分解。