首页 > 代码库 > 创建型模式-工厂三姐妹

创建型模式-工厂三姐妹

简单工厂模式:

      就简单工厂而言,算是三姐妹之中最小的一个,也是最简单的一个了!

      简单工厂模式是类的创建模式,又叫做静态工厂方法模式。虽然为很多模式提供了基础与方便,但是他却不属于23种GOF设计模式之一,至于为什么?或许就是因为他不符合开放-封闭老爷子的脾气吧!

      简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

工厂方法模式:

      最大的特点就是针对每一个对象建造一个工厂。同时这也是这个模式的缺点。由于每加一个产品,就要增加一个产品工厂的类,这样无疑就增加了额外的开发量。

      那么优点是什么呢? 工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是要改工厂类的,而现在是修改客户端。

相比简单工厂模式而言,优势:

     工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。

抽象工厂模式:

      提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

      抽象工厂模式是工厂方法模式的升级版,他用来创建一组相关或者相互依赖的对象。下边用具体的例子来描述一下。前阵子去北京回来的路上,遇见一个东北的大叔要去富士康打工,自己还好心给了个公交钱指路。

      对于富士康,相信大家不会陌生——一个生产计算机,电子产品的企业。现在要给两个品牌做代工产品:三星和苹果,这两个品牌都有手机和电脑。由于生产工艺的不同,开设了两条生产线:一条线只生产手机,一条线只生产电脑,总负责人是老王。假设现在我要一部三星手机,那么老王则对着电脑说,生产一部三星手机;某一天我又想要一个苹果电脑,那么老王又对着生产电脑的生产线,输入:生产一台苹果电脑……

构件图:


      这个例子中主要涉及到了两种抽象产品(三星和苹果),而每种抽象的产品都有两种产品角色(手机和电脑),这样就要建立两种工厂(手机工厂和电脑工厂)分别负责不同产品角色的实例化。而老王就是那个工厂的总接口,负责找到正确的生产工厂,并且拿到你想要的类型的产品。

      这就是所谓的抽象工厂模式,每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构。有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。

      好处说完了,当然也存在着自身的缺点了,抽象工厂最大的缺点就是对产品族的扩展非常困难。这时候就需要简单工厂小妹来帮忙了,舍弃该舍弃的类。

      其实工厂三姐妹各有各的优缺点,简单工厂就是只有一个具体工厂类来创建一种基类的多个不同的派生类;工厂方法就是有多个派生于一个基类的具体工厂类,每个具体工厂只生产一种基类的一个派生类;抽象工厂也是只有一个工厂基类,但是每个具体工厂生产多个相关基类的各一个派生类,就如上产三星手机一样。



·