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

设计模式完成学业,我是一个研究躺在订单,有三种模式其名称中包含“工厂”这个词眼,。它们就是“工厂三姐妹”,以下我们通过计算器的演示样例来好好认识一下这姐妹三儿。

简单工厂模式:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1lMX2hhcHB5Z2lybA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

简单工厂类中的代码:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1lMX2hhcHB5Z2lybA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

从中我们能够看到。当用户请求进行加法运算时,仅仅需operationFactory.createOperate("+"),工厂就会自己主动给出一个加法类的实例,用户根本不用和详细的运算类打交道,对象的创建过程被封装起来了。

可是假设我们要加入一个幂运算,不仅要在运算类下加入幂运算的子类来扩展,还须要修改工厂类,加入新的case。这样对修改也开放了。简单工厂模式就是由于违背了开闭原则,而不能算得上一个真正的设计模式。

当工厂类负责创建的对象比較少且不再增减,客户仅仅知道传入工厂类的參数的情况下,使用简单工厂模式是个不错的选择。

工厂方法模式:

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

全部生产详细产品类的工厂。都要实现这个接口。client的代码变成了这种:

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

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

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

抽象工厂模式:

(自己举得样例。有不妥之处。请谅解)

这样一来。客户能够更换产品的系列,想要算术型计算器,IFactory=new  ArithmeticFactory()。想要科学型的,IFactory=new  ScienceFactory()。

工厂方法模式与抽象工厂模式的差别事实上就是两句话:前者仅仅有一个抽象产品类。而后者有多个。前者的详细工厂类仅仅能创建一个详细产品类的实例,而抽象工厂模式能够创建多个。

纵观这三种模式,长江后浪推前浪。但不要以为抽象工厂模式就非常完美了,当我们要加入乘法运算呢?不仅有扩展还有修改。学习要灵活,这三姐妹能够互相帮助呀,能够让简单工厂模式来改进抽象工厂模式。事实上在全部用到简单工厂的地方,都能够考虑反射技术来去除switch或if,解除分支推断带来的耦合。

办法总比困难多的。

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

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-18 01:48:32

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

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

设计模式学完了,我是按照大话书上的顺序一个一个学习的,其中有三个模式名称中含有"工厂"这两个字眼,而且都属于创建型,它们就是"工厂三姐妹",下面我们通过计算器的示例来好好认识一下这姐妹三儿. 简单工厂模式: 简单工厂类中的代码: 从中我们可以看到,当用户请求进行加法运算时,只需operationFactory.createOperate("+"),工厂就会自动给出一个加法类的实例,用户根本不用和具体的运算类打交道,对象的创建过程被封装起来了.但是

设计模式工厂三姐妹

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

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

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

创建型模式-工厂三姐妹

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

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

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

Java设计模式(三)-装饰者模式

我们都知道,可以使用两种方式给一个类或者对象添加行为. 一是使用继承.继承是给一个类添加行为的比较有效的途径.通过使用继承,可以使得子类在拥有自身方法的同时,还可以拥有父类的方法.但是使用继承是静态的,在编译的时候就已经决定了子类的行为,我们不便于控制增加行为的方式和时机. 二是使用关联.组合即将一个对象嵌入到另一个对象中,由另一个对象来决定是否引用该对象来扩展自己的行为.这是一种动态的方式,我们可以在应用程序中动态的控制. 与继承相比,关联关系的优势就在于不会破坏类的封装性,且具有较好的松耦合

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

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

Java设计模式(三)原型模式

(五)原型模式 Prototype 原型模式目的是复制一个现有对象来生成新的对象,而不是通过实例化的方式.原型模式需要实现 Cloneable 接口,覆写clone方法,复制分为浅复制.深复制. 浅复制:将一个对象复制后,基本数据类型的变量都重新创建,引用类型,指向的还是原对象所指向的. 深复制:讲一个对象复制后,不论基本数据类型和引用类型,都是重新创建,是完全的彻底的复制. public class ProtoType { public static void main(String[] ar

云计算的设计模式(三)——补偿交易模式

云计算的设计模式(三)--补偿交易模式 撤消由一系列的步骤,它们共同限定了终于一致性操作中,假设一个或多个步骤失败运行的工作.依照终于一致性模型,业务实现复杂的业务流程和工作流的云托管的应用程序中非经常见. 背景和问题 在云中运行的应用程序频繁改动数据. 此数据可跨在各种地理位置的所保持的数据源的一个品种传播. 为了避免争用,并提高在分布式环境中,比如这种性能,应用程序不应该试图提供强事务一致性.相反,应用程序应该实现终于一致性. 在该模型中,一个典型的业务操作由一系列的独立的步骤.而正在运行这