设计模式------工厂三姐妹

设计模式学完了,我是按照大话书上的顺序一个一个学习的,其中有三个模式名称中含有“工厂”这两个字眼,而且都属于创建型,它们就是“工厂三姐妹”,下面我们通过计算器的示例来好好认识一下这姐妹三儿。

简单工厂模式:

简单工厂类中的代码:

从中我们可以看到,当用户请求进行加法运算时,只需operationFactory.createOperate("+"),工厂就会自动给出一个加法类的实例,用户根本不用和具体的运算类打交道,对象的创建过程被封装起来了。但是如果我们要添加一个幂运算,不仅要在运算类下添加幂运算的子类来扩展,还需要改动工厂类,添加新的case,这样对修改也开放了。简单工厂模式就是因为违背了开闭原则,而不能算得上一个真正的设计模式。当工厂类负责创建的对象比较少且不再增减,客户只知道传入工厂类的参数的情况下,使用简单工厂模式是个不错的选择。

工厂方法模式:

同简单工厂模式相比,我们能清晰地看到工厂类下多了具体运算的工厂子类,工厂类接口的任务不那么繁重了,只有一个创建抽象产品的方法:

所有生产具体产品类的工厂,都要实现这个接口。客户端的代码变成了这样的:

IFactory operFactory=new AddFactory();Operation oper=operFactory.CreateOperation();

这样就让子类去决定实例化具体的类了,分工更细了,责任到人。这时候,我们要添加幂运算只需在工厂类和运算类下分别扩展一下,而不用修改代码了,弥补了简单工厂模式的不足之处。

当需要生产一系列的产品时,比如说有两种级别的计算器,一种是我们常见的算术型计算器,一种是科学型计算器,它们都能计算加减乘除,而工厂方法模式实现的只是一种计算器。这个时候,就要用抽象工厂模式了,真可谓山外有山,人外有人。

抽象工厂模式:

(自己举得例子,有不妥之处,请谅解)

这样一来,客户可以更换产品的系列,想要算术型计算器,IFactory=new  ArithmeticFactory(),想要科学型的,IFactory=new  ScienceFactory()。工厂方法模式与抽象工厂模式的区别其实就是两句话:前者只有一个抽象产品类,而后者有多个。前者的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

纵观这三种模式,长江后浪推前浪。但不要以为抽象工厂模式就很完美了,当我们要添加乘法运算呢?不仅有扩展还有改动。学习要灵活,这三姐妹可以互相帮助呀,可以让简单工厂模式来改进抽象工厂模式。其实在所有用到简单工厂的地方,都可以考虑反射技术来去除switch或if,解除分支判断带来的耦合。办法总比困难多的。

这姐妹三儿就介绍到这儿了,今天先混个脸熟,以后打交道的日子多着呢。

设计模式------工厂三姐妹,布布扣,bubuko.com

时间: 2024-10-10 02:31:49

设计模式------工厂三姐妹的相关文章

设计模式工厂三姐妹

最近对于设计模式中的工厂三姐妹--大姐(抽象工厂).二姐(工厂模式).三姐(简单工厂),进一步学习了,以下是我的一些认识. 一.简单工厂 运用了一个单独的类将创建实例的过程独立出来,这就是简单工厂类,如:简单运算工厂类,至于在运用的过程中,如果增加运算运算,需要修改运算工厂类,这就违背了 开放-封闭原则(尽可能使代码做到扩展的开放,更改的封闭,也就是对于程序的改动通过增加代码进行,而不是更改现有的代码). 二.工厂模式 相对于以上的简单工厂增加了工厂子类,使一个类的实例话延迟到子类,这样在增加运

【大话设计模式】——工厂三姐妹

最近在看设计模式,故事好玩是好玩,可是代码也很多啊,有时候看图不太理解,为了让自己有兴趣并且坚持下去,在第一遍宏观的看了一遍之后,把23种设计模式进行了一下分类,然后再找类似的模式一起学习,通过对比学习再理解,确实是容易了一些.先学的创建型模式里的工厂三姐妹,一块学习这三个模式,比较一下它们的优缺点,知道什么时候要用什么模式. 一.概念介绍 1.简单工厂:Simple Factory,是由一个工厂对象决定创建出哪一种产品类的实例,是工厂模式家族中最简单实用的模式. 个人理解:将界面与业务逻辑分离

创建型模式-工厂三姐妹

简单工厂模式: 就简单工厂而言,算是三姐妹之中最小的一个,也是最简单的一个了! 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.虽然为很多模式提供了基础与方便,但是他却不属于23种GOF设计模式之一,至于为什么?或许就是因为他不符合开放-封闭老爷子的脾气吧! 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂方法模式: 最大的特点就是针对每一个对象建造一个工厂.同时这也是这个模式的缺点.由于每加一个产品,就要增加一个产品工厂的类,这样无疑就增加了额外的开发量. 那么优点是什么呢

设计模式------厂三姐妹

设计模式完成学业,我是一个研究躺在订单,有三种模式其名称中包含"工厂"这个词眼,.它们就是"工厂三姐妹",以下我们通过计算器的演示样例来好好认识一下这姐妹三儿. 简单工厂模式: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1lMX2hhcHB5Z2lybA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"

设计模式(三) : 创建型模式--工厂方法模式

工厂方法模式区别与简单工厂模式主要在于,factory中对对象的实例化延迟到了子类的factory中, 这也是优于简单工厂的地方.下面看这个模式的类图(截自<java与模式>): 示意性代码: ? 1 2 3 4 5 6 7 package com.javadesignpattern.factorymethod; public interface Creator {          public Product fatcory(); } package com.javadesignpatte

设计模式(三): FACTORY工厂模式 -- 创建型模式

1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 2.适用场景 1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来.Java Collection中的iterator() 方法即属于这种情况. 2.第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给

设计模式(三)——抽象工厂模式

设计模式(三)--抽象工厂模式 一.抽象工厂模式 1.抽象工厂模式简介 定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. UML类图: 2.抽象工厂模式角色 (1)抽象工厂AbstractFactory:抽象工厂类,提供创建两种产品的接口CreateProductA和CreateProductB,由派生的各个具体工厂类对其实现 (2)具体工厂:包括具体工厂FactoryM和具体工厂FactoryN.具体工厂FactoryM用于生产具体产品MProductA和具体产品M

iOS设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼.该场景对应的UML图如下所示: 图1:简单工厂模式UML图 简单工厂模式的参与者: 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口.可是抽象类或接口. 具体产品(Conc

iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下所示: 代码结构如下 Animal 类 @interface Animal :NSObject @proterty(nonatomic,strong) NSString *name; -(void)laugh; @end Dog类 @interface Dog:Animal @end Cat类 @i