设计模式--简单工厂VS工厂VS抽象工厂
前几天我一直在准备大学毕业生,始终绑起来,如今,终于有时间去学习设计模式。我们研究今天的话题是植物三口之家的设计模式的控制--简单工厂VS工厂VS抽象工厂。
经过细心推敲,我们不难得出:工厂模式是简单工厂的升级版,抽象工厂是工厂模式的升级版,简单工厂+抽象工厂是抽象工厂的升级版。知道了它们之间的宏观关系,以下我带它们从一次次蜕变了解它们为什么是这种关系。
我们最原始的代码思维是把所有的实现都放在一个类中。功能尽管是实现了,但耦合性非常高。非常不方便维护,好比活字印刷术之前的印刷,一个地方须要改动,则所有内容都须要推倒重来。
简单工厂攻克了上述问题,简单工厂中的工厂类包括了必要的逻辑推断。依据client的选择条件动态实例化相关的类,其思路例如以下图所看到的。但它有个致命的缺点:违反开放-封闭原则。比方当须要创建“开方类”的时候,须要改动“简单工厂类”中的方法。
工厂模式弥补简单工厂的不足,将一个类的实例化延迟到其子类。
工厂方法把简单工厂的内部逻辑推断移到了client代码来进行,假设想要加入功能。仅仅需改动client就可以。
比方加入“开方类”,仅仅需在运算类以下加入一个“开方类”,在抽象工厂以下加入一个“开方工厂”就可以。保证了开方-封闭原则。其思路例如以下图所看到的。
但它的缺点是每加一个运算类。就须要加一个运算工厂的类,添加了额外的开发量。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXV3ZW56aGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
抽象工厂弥补了工厂模式的不足,抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们详细的类。比方按工厂模式的思想,SqlserverUser类、AccessUser类、SqlDepartment类、AccessDepartment类须要四个工厂来创建。而抽象工厂对它们公共的部分进行了抽象,仅仅需两个工厂就能完毕相同需求,其思路例如以下图所看到的。它的还有一个长处是详细的创建实例过程与client分离,client通过抽象接口操纵实例。它的缺点是假设需求来自添加功能。比方我们要添加项目表Project,则至少须要添加三个类IProject、SqlserverProject、AccessProject。还须要更改IFactory、SqlserverFactory、AccessFactory才干够全然实现。要改动三个类,过程有点糟糕。
简单工厂+抽象工厂弥补了抽象工厂的不足,用DataAccess类取代IFactory、SqlserverFactory、AccessFactory三个工厂类。在DataAccess类中,用反射+配置文件实现数据訪问,核心方法:Assembly.Load(“程序集名称”).CreateInstance(“命名空间.类名称”)。依据配置文件的keyword,动态创建类。其其思路例如以下图所看到的。
事实上每种设计模式都有它的优缺点,我们必须在学习它们长处的同一时候也要考虑它们的缺点,这样才干在学习过程中游刃有余。
但做人就不一样了,这里能够引用米老师的一句话: “假设仅仅是追寻一个人的缺点,慢慢别人的缺点也会成为自己的缺点。可是假设总是看别人的长处,慢慢别人的长处也成为自己的长处。”
我希望我的解释能帮助你成长。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
设计模式--简单工厂VS工厂VS抽象工厂的更多相关文章
- Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)
Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
- java之设计模式工厂三兄弟之抽象工厂模式
[学习难度:★★★★☆,使用频率:★★★★★] 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工 ...
- PHP简单工厂模式、工厂方法模式和抽象工厂模式比较
PHP工厂模式概念:工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动 ...
- PHP简单工厂模式、工厂方法模式和抽象工厂模式
PHP工厂模式概念:工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动 ...
- JAVA中的工厂方法模式和抽象工厂模式
工厂方法模式: 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类.类型:创建类模式类图: 类图知识点:1.类图分为三部分,依次是类名.属性.方法2.以& ...
- 【design pattern】工厂方法模式和抽象工厂模式
前言 设计模式分为三大类: 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式: 结构型模式:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式: 行为型模式 ...
- Java开发中的23中设计模式详解(一)工厂方法模式和抽象工厂模式
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下 ...
- iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
1. 简单工厂模式 怎样理解简单工厂,工厂方法. 抽象工厂三种设计模式? 简单工厂的生活场景.卖早点的小摊贩.他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂.它生产包子,馒头,地沟油烙的煎饼. ...
随机推荐
- android一些面试题目
1.ListView怎么提高滑动效率 2.说下你做过项目的包的构架,(联网,解析,activity,database) 重点 3.载入大量图片怎么做(包含小图和查看大图) 怎么降低一次跟server的 ...
- 《Effective C++ 》学习笔记——规定10
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 比較Swift与HDFS话Ceph本质(by quqi99)
作者:张华 发表于:2014-06-21版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99 ) 作者将又 ...
- HTML5 CSS3 诱人的实例 : 网页载入进度条的实现,下载进度条等
今天给大家带来一个比較炫的进度条,进度条在一耗时操作上给用户一个比較好的体验,不会让用户认为在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务 ...
- lock订单号
常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...
- OpenCV原则解读HAAR+Adaboost
因为人脸检测项目.用途OpenCV在旧分类中的训练效果.因此该检测方法中所使用的分类归纳.加上自己的一些理解.重印一些好文章记录. 文章http://www.61ic.com/Article/DaVi ...
- iterator pattern
6 迭代器模式总结 迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器来完成.由于很多编程语言的类库都已经实现 ...
- Android_使用StrictMode
调试开发
本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/40076049 1.StrictMode简单介绍 自Android 2 ...
- C#的WebBrowser控制浏览
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 39一个可以让你受益HTML5课程
事不宜迟,本文作者是我们收集的在线学习HTML5资源.我们希望他们能够帮助你更好地学习HTML5. 不错啊! 只,说原作者40一个只有39一.由于第一5钍和8一是重复. 原文在此! 1. 五分钟入门H ...