设计模式--简单工厂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. 简单工厂模式 怎样理解简单工厂,工厂方法. 抽象工厂三种设计模式? 简单工厂的生活场景.卖早点的小摊贩.他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂.它生产包子,馒头,地沟油烙的煎饼. ...
随机推荐
- js实时监听input中值的变化
$(function(){ $('#inputid').bind('input propertychange', function() { // input 中的值 var params = $(th ...
- Nagios经check_http监视web申请书server多个tomcat维修
怎么样nagios显示器tomcat,它是一个相对简单的和复杂的事情.简单是因为,只有监控的假设web应用服务器tomcat无论是服务正常进行,很简单.假设你要监视tomcat其他例子,例如连接数jv ...
- Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明)
一.隐藏和显示元素 $('#button_save_12').css('display', 'none'); // 隐藏按钮 $('#button_save_12').css('display', ' ...
- php判断变量是否存在
isset— 检测变量是否设置, isset() 只能用于变量,因为传递任何其它参数都将造成解析错误.若想检测常量是否已设置,可使用 defined() 函数. 如果已经使用 unset() 释放了一 ...
- Windows Phone开发(43):推送通知第一集——Toast推送
原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一 ...
- UVALive 3890 Most Distant Point from the Sea(凸包最大内接园)
一个n个点的凸多边形,求多边形中离多边形边界最远的距离.实际上就是求凸包最大内接圆的半径. 利用半平面交求解,每次二分枚举半径d,然后将凸包每条边所代表的半平面沿其垂直单位法向量平移d,看所有平移后的 ...
- IT痴汉的工作现状13-吓唬电话
那是一个普通的周末上午,稍微阴沉的天,使得暑气消退了好多.刚吃过早饭,我懒懒的浏览着CSDN论坛上有趣的问题和答案. 突然电话响起.是一个陌生的号码.我像往常一样接起电话,""您好 ...
- 使用ToggleButton和StackPanel+Border实现圆角开关按钮动画效果
<ToggleButton Height=" HorizontalAlignment="Left" Margin="138,122,0,0" N ...
- coco2d-x 基于视口的地图设计
<pre name="code" class="plain"> 基于视口的地图设计 DionysosLai 2014-06-14 第三人称游戏,玩家 ...
- sql server从一个数据库复制一个表到另一个数据库的方法
分两步进行: 第一步,复制表结构: 在表上面右击——>编写表脚本为:——>Create到——>新查询编辑器窗口,你也可以保存为sql文件, 将新查询编辑器窗口最上面的一句话USE [ ...