创建型模式-工厂三姐妹

简单工厂模式:

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

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

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

工厂方法模式:

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

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

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

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

抽象工厂模式:

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

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

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

构件图:


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

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

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

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

再换句话而言,其实就如上例中,简单工厂就是一条生产线,不管你生产什么,是电脑还是手机,都只是在这条生产线上生产,而工厂方法则是由于生产的多了,老板突然发现就一条生产线效率太低了,所以就多开发了一条,一条用来生产手机,一条用来生产电脑,这样就大大的提高了其生产效率。而抽象工厂则是将老板的整个工厂再复制一份,用来生产不同品牌的电脑和手机。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值