设计模式总纲——工厂方法模式

  接上文,自小陈,联系了小做坊工厂以后,生产出了几千件产品以后,把他的那三件产品摆上了网店,而且在微信中宣传以后,得到了一致好评,购买者络绎不绝,特别是骑士队队徽,正值NBA东西部决赛,卖的特别火热,一会儿就脱销了,这时候小陈想扩大产品线,又生产了一大批的图纸,包括了一系列NBA中的其余球队的徽章和一些其余的小玩意,打算联系这个小做坊工厂,想让其也一块儿生产这些产品,可是这个小工厂表示迫不得已,由于这个工厂实在是过小了,若是要扩充产品线的话,必须把原来的机器给拆了,从新组装里面的图纸,并且由于图纸太多,会致使机器内部臃肿不堪,不堪重负,因此这个小做坊也表示迫不得已。微信

  恰巧这时候雷霆队和勇士队酣战正甘,很多客户都但愿获得雷霆队的队徽和勇士队的队徽,并且有的还但愿小陈能够扩充产品系列,生产骑士,雷霆,勇士队的队服,这时候小陈是急的像热锅上的蚂蚁同样,由于客户的要求的产品愈来愈多样,这个小做坊已经知足不了了,这时候厂里面的主管就献策了,说认识几家中大型工厂,能够解决生产上的问题,小陈一听,乐不可支的就赶忙让小做坊的主管联系了中大型工厂的主管,而后便驾车前往工厂查看了。架构

  到了工厂一看,果真不小,开车绕着工厂一圈居然花了10几分钟,联系了这家工厂的主管以后,小陈了解到了一些具体的消息,这家公司有下属的多家子公司,并且每一个子公司都分工明确,对于产品,各个子公司作的产品都是单一的,既保证了生产的速率,也保证了生产的质量,不会由于生产过多类型的产品致使混乱,职责单一,说着说着,这个主管给小陈画了一下他们的公司架构图....以下:ide

  

如图所示,总部下面分别有多个子工厂,不一样的子工厂生产不一样的产品,如工厂A和工厂B,正如设计图纸Product同样,须要有具体的产品A和B,而大型工厂就是不同,规范,产品A由工厂A来生产,产品B由工厂B来生产,再也不想小做坊工厂同样,全部的产品都耦合在一个工厂里面了,咱们来看看具体的模板代码:spa

产品接口,像图纸同样,全部的产品都必须有图纸,既全部的产品都必须实现该接口,像如下的具体产品A,和具体产品B设计

1 public interface Product {
2     public void productMethod();
3 }
1 public class ConcreteProductA implements Product{
2     @Override
3     public void productMethod() {
4         System.out.println("Create Product A!");
5     }
6 }
1 public class ConcreteProductB implements Product{
2     @Override
3     public void productMethod() {
4         System.out.println("Create Product B!");
5     }
6 }

工厂接口,既总部,全部的分公司,都是由下面总部衍生出来的,具体要生产什么样的产品子公司能够自行决定,但子公司必须遵从总部的指挥,不能脱离总部code

1 public interface Factory {
2     public Product createProduct();
3 }

具体生产A产品的工厂和生产B产品的工厂xml

1 public class ConcreteProductFactoryA implements Factory{
2     @Override
3     public Product createProduct() {
4         return new ConcreteProductA();
5     }
6 }
1 public class ConcreteProductFactoryB implements Factory{
2     @Override
3     public Product createProduct() {
4         return new ConcreteProductB();
5     }
6 }

他们生产的过程以下:blog

1     @Test
2     public void client(){
3         Factory factory = new ConcreteProductFactoryA();
4         Product product = factory.createProduct();
5         product.productMethod();
6     }

看到这个生产过程,小陈就疑惑了,这样的话,每次生产的时候都要生产一个工厂喽?那样很不划算啊,这个主管默默的点了点头说,不错不错,小陈真是有生意头脑,固然了,咱们总部是不会这样子作的,这样成本过高了,并且咱们实在也负担不起,每当咱们总部要创建下属工厂的时候,都会把这个工厂的具体地址登记在案,(将工厂名的信息记录到配置文件中),等到须要的时候,咱们直接从记录册里面定位出所需的工厂就是了。(等到须要使用的时候,直接经过反射,让虚拟机读取配置文件,自行"找到"该工厂),咱们的登记范本是这样的:接口

1 <?xml version="1.0"?>  
2 <config>  
3     <className>ConcreteProductFactoryC</className>  
4 </config>

因此,当咱们须要扩建子工厂的时候,只须要获得总部的赞成(实现Factory方法),而后把子工厂的信息登记在案,(把子工厂名记录到配置文件中),等到须要的时候,咱们就能够用工厂开始建造所需的东西了,固然了,还须要有图纸哦。(实现了Product方法的产品)。虚拟机

小陈惊呼,妙哉,经过一个记录本就能够省去了那么多的成本,也便于管理了,接下来,小陈就把目前的新需求告诉了新主管,而后主管听了以后,联系了几家子公司,边开始生产新的所需的产品了,一会儿就生产出了骑士、雷霆、勇士的徽章、队服,队旗等产品,小陈另外一方面也联系了网店的店长,让他开始铺货,上架出售,一切都层次分明,看来小陈离当上CEO,迎娶白富美,走上人生巅峰的路更近了。。可是后面有个头大的事情又出现了。

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

相关文章
相关标签/搜索