前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Factory),其是在工厂方法模式的基础上改进而来,如果没有弄明白工厂方法模式的同学请先观看<大话设计模式C++版——工厂方法模式>. 为什么会有抽象工厂模式?抽象工厂模式是简单工厂模式缺陷的终极解决方式么?NO,抽象工厂模式并不是为了解决简单工厂模式的缺陷而活着,它是因为有新的使命而诞生. 一个简单的例…
工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版——简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码,不符合开放—封闭原则,那么工厂方法模式会在那方面有所改进呢?我们仍以简单工厂模式中加减法计算器为例. 1.保持简单工厂模式的 IOperation 接口和实现对象(COperation_Add 和 COperation_…
简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器. 1.抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程) class IOperation { public: IOperation() : m_nNuml(0), m_nNumr(0) {} virtual ~IOperation() {} virtual void SetNum(int nNuml = 0, int nNumr = 0) { m_nNuml = nN…
又和大家见面了.可以坚持写出第二篇文章真不错,好好加油. <<大话设计模式>>解说策略模式是以商场收银软件程序开头的,那么问题来了.哪家商场收银软件强,开玩笑了. 读过上篇文章<<简单工厂模式>>的知道,它有两个缺点:1.client依赖两个类.耦合性高:2.假设算法过多则须要写非常多类.解决上面问题的就是策略模式了. 策略模式:它定义了算法家族.分别封装起来.让它们之间能够互相替换,此模式让算法的变化,不会影响到使用算法的客户. 商场收银软件:单位价格*打…
什么是策略模式? 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 组成:抽象策略角色: 策略类,通常由一个接口或者抽象类实现.具体策略角色:包装了相关的算法和行为.环境角色:持有一个策略类的引用,最终给客户端调用. 百度了一下,还是没有搞明白策略模式与工厂模式的本质区别,只是有了一些表象的理解. 我将工厂模式中用到的例子进行了改写: 工厂模式:http://www.tinysoft.me/index.php/arc…
 1  2{<HeadFirst设计模式>之策略模式 }  3{ 本单元中的类为策略类           }  4{ 编译工具: Delphi7.0           }  5{ E-Mail : guzh-0417@163.com   }  6  7unit uStrategy;  8  9interface 10 11type 12  {飞行接口,及其实现类 } 13 14  IFlyBehavior = Interface(IInterface) 15    procedure Fl…
上篇<大话设计模式C++版——抽象工厂模式>中,我们拯救世界未遂,留下小小的遗憾,本篇中我们将给出一个解决方案——COM组件技术,同时也顺便扯扯工厂模式在COM组件技术中的应用. 工厂模式违背开放—封闭原则的根本原因在于对象的产生无法通过客户模块外的数据进行控制,如果我们能从xml.注册表.配置文件中写入一个类的名字,然后模块从中读出类名,并根据读出的类名创建对象,那不就和C#高大上的反射技术一样牛B哄哄了.非常幸运,微软的COM组件技术就提供了这么一个平台. 1.COM组件是神马 为了节约篇…
本篇开始前先发个福利,程杰的<大话设计模式>一书高清电子版(带目录)已上传至CSDN,免积分下载. 下载地址:http://download.csdn.net/detail/gufeng99/8843487 代理模式是一种比较简单但却实用的设计模式,他可以灵活的更换代理的对象,但保证功能的完整性,就如卖衣服的代理商,他可以代理美特斯邦威的衣服,如果美特斯邦威的衣服被大家吐槽不好卖了,他还可以换去代理卖佐丹奴的,但不管怎么更换,还是能满足大家的需求——买衣服.     下面以大话设计模式书中的例…
上回<大话设计模式C++版——简单工厂模式>中指出了简单工厂模式的缺陷,即违背了开发—封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码,如何改造switch结构,表驱动法就可以粉墨登场了. 表驱动法的介绍见<数据驱动编程之表驱动法>. 1.面向接口编程,先改造抽象接口类IOperation class IOperation { public: IOperation() : m_nNuml(0), m_nNumr(0) {} vi…
引言 本文摘自<JavaScript设计模式与开发实践> 在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但是不在乎钱,可以选择坐飞机. 如果没有钱,可以选择坐大巴或者火车. 如果再穷一点,可以选择骑自行车. 在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法. 这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文…