设计模式总纲——抽象工厂模式

来源:互联网 发布:南昌市残疾淘宝培训 编辑:程序博客网 时间:2024/06/05 06:41

  话说,上次小陈自从把生产线从小作坊换成中大型工厂之后,业绩是一日千里,小陈更是财源滚滚,订单是一件接着一件,正直NBA火热,特别是NBA系列的产品卖得相当火热,这时有件事情让小陈犯难了,因为在这边,小陈目前的生产线只是进行单一的进行生产,队徽工厂生产着队徽,球衣工厂生产的球衣,球鞋工厂生产着球鞋,而小陈在业绩提高的同时,他对业绩进行了大数据分析,他发现了,购买了骑士队队徽的人有99.99999%的人会购买骑士队服,和印有骑士队标的球鞋,同理购买了雷霆队徽的人也会购买雷霆队的队服和雷霆队的篮球。

  这让小陈头疼的是,因为工厂生产的产品单一并且分散,每次进行发货的时候,都要等待他们从不同的地方运到店里,然后由店员进行组装,这样,不仅耗时,而且小陈的人力成本也蹭蹭蹭的往上涨,这不,小陈的员工又开始向小陈抱怨了,“陈总,你看我们每天都要组装将近1万套的产品,员工已经都累得要死要活了,很多人都打算辞职不干了,你赶紧给想想办法吧。”,小陈这时候急的焦头烂额,赶忙给一线人员升值加薪,才暂时安抚住了他们的情绪。

  这时候,小陈也联系了工厂的主管,向他述说了目前的苦衷,询问有没有更好的办法。这时他们的主管向小陈说:“你这种问题以前我们早就遇到了,我们肯定已经早已做好了预案了,像我们公司总部那边对于一系列的套装产品的话,比如像,一个产品族的产品都迁移到同一个工厂生产,并进行组装,类似球鞋,球衣,篮球就属于一类产品,不同的产品族对应着不同的工厂,来,我来给你看一下,我们工厂中,对于产品族工厂的架构图。”然后工厂的主管就给小陈传了一张产品族生产工厂的架构图。

“你看,如果要生产一系列的产品族产品的话,只需要把产品生产线放在一起就可以了。”,现在我们来看看具体的产品线的模板代码:比如我们这次要来生产一套骑士队的产品和雷霆队的产品,产品暂时就包含了队徽和球鞋

1、一个抽象接口,专门用来生产队徽和球鞋的,但是具体的实现交给下面的子工厂。

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

2、产品生产的图纸,这里只包含的具体产品的信息,如果需要有特定的方法,则自行进行添加。

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

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接口,取其中一例即可。

1 public class CavalierBadge implements AbstractProduct{2     @Override3     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     }
复制代码

这样的话我们就可以生产对一一对应的产品族了。

小陈看了一下,很开心,这样的话就可以节省很多自己的人力成本了。产品又都分成了一类,但是小陈转念一想,如果单单生产不同球队的产品就需要一个工厂的话,那样的话成本太大了,每次都要新建一个工厂,主管默默的点了点头,说道:

“当然了,如果更细分的话,其实骑士队的队徽和球鞋和雷霆的队徽和球鞋是属于同一个大类,这样的话,我们可以再在工厂内部加分支来进行选择,那样的话,只需要使用一个工厂的产品就可以了,这样的话,我们的生产线就不规范了,就会变成小作坊的工作模式了,但是有时候我们也会为了成本,不产生太多不必要的工厂来进行这种工作模式,所以说,看看究竟是为了扩展性来拓展产品好,还是为了减少成本(类的膨胀),不过有时候在我们开始建造工厂的时候都会先考虑生产的规模(工程规模)来择优,或者居中选择。”

小陈听了,陷入了沉思,看来企业要做大做强也不容易啊,考虑的东西要到方方面面啊,不过现在既然我每天的产品已经达到了 十万/天 的销量的话,那我先抓紧铺货了,就先拓展些工厂,增加产品,开始开搞了。小陈在自己的商业之路又迈出了坚实的一步,往后小陈又会在商业之路上遇到什么波折呢?

  欲知后事如何,且听下文分解。

0 0
原创粉丝点击