设计模式
Tyrion-Lannister
这个作者很懒,什么都没留下…
展开
-
设计模式C++描述----22.访问者(Visitor)模式
一. 访问者模式定义:表示一个作用于某对象结构中的各元素的操作。它你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。结构如下:二. 举例假设有一项科学实验,是用来对比两种种子在不同环境下的生长情况。两种种子,一种是普通的种子(Seed_A),一种是太空运回的种子(Seed_B)。生长环境,分别是在多雨环境下(Rain_Statu转载 2013-07-30 10:52:25 · 901 阅读 · 0 评论 -
设计模式C++描述----19.命令(Command)模式
一. 举例说明我们知道,在多线程程序中,多个用户都给系统发 Read 和 Write 命令。这里有几点需要说明:1. 首先明确一点,所有的这些 Read 和 Write 命令都是调用一个库函数。2. 用户并不需要知道别的用户的存在,也不管别人发不发命令,只管自己发命令,最后给结果即可。3. 这些命令先是到了一个消息队列里面,然后由消息队列调用库函数。转载 2013-07-30 18:40:20 · 843 阅读 · 0 评论 -
设计模式的几种原则
一. 里氏代换原则定义:子类型必须能够替换它们的父类型。[DH]解释:也就是说,在软件里面,把父类都替换成子类,程序的行为没有变化。也只有这样父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。这个原则是对继承的一个约束,也就是说,继承中子类严格满足"is-a"的关系。所以,当你看到一个继承的时候,要习惯性的把他的父类和子类看成一个整体,这样会有助于转载 2013-07-31 07:43:23 · 850 阅读 · 0 评论 -
聚合,组合,依赖
1. 聚合:是关联关系的一种特例,体现的是整体与部分拥有的关系,即 has-a 的关系,此时整体与部分之间可以分离。[cpp] view plaincopy//学校 class School { }; //学生 class Student { private: School*转载 2013-07-31 07:51:28 · 908 阅读 · 0 评论 -
私有构造函数 单例模式
私有构造函数 通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么? 我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访转载 2013-07-24 15:49:09 · 942 阅读 · 0 评论 -
设计模式C++描述----21.解释器(Iterpreter)模式
一. 解释器模式定义:给定一个语言,定义它的文法的一种表示,并定一个解释器,这个解释器使用该表示来解释语言中的句子。结构如下:代码如下:[cpp] view plaincopy//包含解释器之外的一些全局信息 class Context { public: Contex转载 2013-07-31 07:35:18 · 994 阅读 · 0 评论 -
设计模式C++描述----20.迭代器(Iterator)模式
一. 举例说明我们知道,在 STL 里提供 Iterator 来遍历 Vector 或者 List 数据结构。Iterator 模式也正是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个类中进行,这样就避免暴露这个聚合对象的内部表示的可能。例如在 STL 里有如相下结构:二. 迭代器模式定义:提供一种方法顺序访问一个聚合对象中各个元素,转载 2013-07-31 07:35:40 · 834 阅读 · 0 评论 -
常用 UML 类图
一. 类类图分三层:第一层是类的名称,如果是抽象类,则用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意 '+' 表示 public,'-' 表示 private,'#' 表示 protected 。[cpp] view plaincopyclass Animal转载 2013-07-31 07:46:54 · 1074 阅读 · 0 评论 -
观察者模式(C语言实现)
一. 概述Observer 模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。Sbuject 相当于通知者,它提供依赖于它的观察者Observer 的注册(Attach)和注销(Detach)操作,并且提供了使得依赖于它的所有观察者同步的操作(Notify)。Obse原创 2014-09-27 12:31:52 · 6507 阅读 · 3 评论 -
职责链模式(C语言实现)
一. 概述职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二. 举个例子员工要求加薪公司的管理者一共有三级:总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总原创 2014-09-27 18:37:30 · 2300 阅读 · 0 评论 -
简单工厂模式(C语言实现)
一. 简单工厂模式简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。举个例子,有一家电子产品生产厂家,它只有一个工厂,能够生产两种型号的产品,A 和 B。可以想像一下,A是电吹风,B是电风扇。客户需要什么样的吹风类产品,一定要显示地告诉生产工厂。原创 2014-06-19 22:07:11 · 2934 阅读 · 0 评论 -
单例模式 (C语言实现)
一.概念单例模式:其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。二.单例类CSingleton 有以下特征它有一个指向唯一实例的静态指针m_pInstance,并且是私有的;它有一个公有的函数,可以获取这个唯一的实例,并且在需要的时候创建该实例;它的构造函数是私有的,这样就不能从别处创建该类的实例。原创 2014-06-19 23:20:57 · 7715 阅读 · 3 评论 -
模板模式 (C语言实现)
一. 问题在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。二. 模式Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。原创 2014-06-19 23:36:09 · 2322 阅读 · 0 评论 -
抽象工厂模式 (C语言实现)
三. 抽象工厂模式抽象工厂模式,它定义为提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。还以上面的例子解释,这家公司经营的还不错,针对其核心技术都申请了专利,后来生始生产相关电子芯片了 (像三星一样,即生产产品也生产芯片)。对于这种情况,我们不能在抽象产品类上继承一个零部件,因为产品和芯片没有什么共同之处,完全是两个领域。你要做芯片,就要专心做,当成一个新的领域,不能用以前产品的那一套流程。这样划分才明确,才能更好的实现高内聚,低耦合的明标。原创 2014-06-19 23:02:53 · 2164 阅读 · 0 评论 -
工厂函数模式 (C语言实现)
二. 工厂方法模式所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。还以刚才的例子解释,这家电子厂赚了不少钱,于是决定再开设一个厂,其中一个工厂专门用来生产A型号的产品,也就是只生产电吹风,而另一工厂专门用来生产B型号的产品,也就是只生产电风扇,这样分工明确了。以后客户要再下定单时,可以直接找到相关的工厂了,比如要A型号的产品,就找A工厂要,不再担心下的定单是A,生产出来的是B产品了。原创 2014-06-19 22:43:57 · 2097 阅读 · 0 评论 -
面向过程和面向对象的一点区别
面向过程的语言(不仅仅是C)是将程序(对数据的一些处理)中的数据和处理分开,使它们天各一方。于是数据们处于无保护、不安全的状态。处理则是凌驾其上、颐指气使、不受约束的驾驭者,而非“服务者”。 对比而言,面向对象的语言(以C++为代表)则是以数据为中心, 处理为其服务的和谐平衡状态。原创 2012-03-24 10:24:26 · 741 阅读 · 0 评论 -
设计模式C++描述----14.外观(Facade)模式
一. 举例说明还以我以前做的文件系统(FileSys)为例:文件系统是一个独立的系统,它提供一套核心的文件操作。除了文件系统,还有四个子系统,分别是杀毒子系统(KillVirus),压缩子系统(ZipFile),加密子系统(EncrypeFile)和刻录子系统(BurnCD),这四个子系统相互独立,但又可以做为主系统功能的一部分。假设客户需要我这个文件系统有两种执行转载 2013-07-30 18:07:51 · 745 阅读 · 0 评论 -
设计模式C++描述----06.适配器(Adapter)模式
一. 定义适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Adapter 模式的两种类别:类模式和对象模式。二. 举例说明实际中,我们为了完成某项工作购买了一个第三方的库来加快开发。这个库可能都是一些.dll文件,这就带来了一个问题!我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为转载 2013-07-30 14:06:27 · 649 阅读 · 0 评论 -
设计模式C++描述----05.职责链(Chain of Responsibility)模式
一. 概述职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二. 举个例子员工要求加薪公司的管理者一共有三级:总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总转载 2013-07-30 14:01:43 · 815 阅读 · 0 评论 -
设计模式C++描述----01.单例(Singleton)模式
一.概念单例模式:其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。[cpp] view plaincopyclass CSingleton { //公有的静态方法,来获取该实例 public: static CSingleton* GetInstance() {转载 2013-07-30 13:26:36 · 850 阅读 · 0 评论 -
设计模式C++描述----03.工厂(Factory)模式
工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。一. 简单工厂模式简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。举个例子,有一家电子产品生产厂家,它只有一个工厂,能够生产两种型号的产品,A 和 B。可以想像一下,A是电吹风,B是电风扇。客户需要什么样的吹风类产品,一定要显示地告诉生产转载 2013-07-30 13:43:02 · 865 阅读 · 0 评论 -
设计模式C++描述----07.建造者(Builder)模式
一. 概述Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。二. 举例KFC 与 Mcdonalds 的汉堡生成过程大致都是转载 2013-07-30 14:12:55 · 810 阅读 · 0 评论 -
设计模式C++描述----08.原型(Prototype)模式
一. 概述定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。换句话说,就是不用重新初始化对象,而是动态地获得对象运行时的状态。再说明白点,就是要一个拷贝过构造函数类似功能的接口。结构图如下:代码如下:[cpp] view plaincopy//原型类,有一个clone接口转载 2013-07-30 16:54:27 · 788 阅读 · 0 评论 -
设计模式C++描述----09.桥接(Bridge)模式
一. 举例N年前:计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上。这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux。其实转载 2013-07-30 16:59:10 · 894 阅读 · 0 评论 -
设计模式C++描述----11.组合(Composite)模式
一. 举例这个例子是书上的,假设有一个公司的组结结构如下:它的结构很像一棵树,其中人力资源部和财务部是没有子结点的,具体公司才有子结点。而且最关健的是,它的每一层结构很相似。代码实现如下:[cpp] view plaincopy//公司类,提供接口 class Company {转载 2013-07-30 17:13:51 · 683 阅读 · 0 评论 -
设计模式C++描述----13.代理(Proxy)模式
一. 举例说明我们有时打开一个网站时会发现有这样的现象,网站上的文字都显示出来了,但是上面的图片还没显示,要等一会才能显示。这些未打开的图片的位置上,还是会有图片框和一些等待的信息的,这就是代理模式的应用,此时的代理存储了真实图片的路径和尺寸也用来显示一些友好的信息。结构图如下:代码实现:[cpp] view plaincopy转载 2013-07-30 18:02:51 · 849 阅读 · 0 评论 -
设计模式C++描述----15.策略(Strategy)模式
一. 举例说明以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法。结构如下:Algorithm:抽象类,提供算法的公共接口。RSA_Algorithm:具体的RSA算法。DES_Algorithm:具体的DES算法。BASE64_Algorithm:具体的Base64算法。在使用过程转载 2013-07-30 18:10:46 · 749 阅读 · 0 评论 -
设计模式C++描述----16.状态(State)模式
一. 举例一般汽车发动机工作时有四种状态,吸气、压缩、做功和排气。在运行时,不同的状态会有不同的行为,当前的状态机在适当的时候会过渡到下一状态。其实用户在使用时根本不知道当前的状态,也无需知道当前的状态。用户只需要给发动机一个初始状态,最后得到一个停止状态就行了。结构图如下:代码如下:[cpp] view plaincopy转载 2013-07-30 18:18:37 · 791 阅读 · 0 评论 -
设计模式C++描述----17.备忘录(Memento)模式
一. 备忘录模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。结构图:使用范围:Memento 模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator 可以根据保存的 Memento 信息还原到前一状态。转载 2013-07-30 18:27:50 · 905 阅读 · 0 评论 -
设计模式C++描述----18.中介者(Mediator)模式
一. 举例比如,现在中图和日本在关于钓鱼岛问题上存在争端。这时,联合国就会站出来,做为调解者,其实也没什么好调解的,钓鱼岛本来就是中国的,这是不争的事实!联合国也就是个传话者、发言人。结构图如下:代码如下:[cpp] view plaincopy//抽象国家 class Country { protected转载 2013-07-30 18:35:28 · 858 阅读 · 0 评论 -
设计模式C++描述----04.观察者(Observer)模式
一. 概述Observer 模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。Sbuject 相当于通知者,它提供依赖于它的观察者Observer 的注册(Attach)和注销(Detach)操作,并且提供了使得依赖于它的所有观察者同步的操作(Notify)。Obse转载 2013-07-30 13:21:45 · 904 阅读 · 0 评论 -
设计模式C++描述----02.模板(Template)模式
一. 问题在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。二. 模式Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。转载 2013-07-30 13:29:37 · 930 阅读 · 0 评论 -
设计模式C++描述----10.装饰(Decorator)模式
一. 举例我之前做过一个文件系统就叫 MyFileSys 吧,后来的话,客户想加入一些附加功能,比如压缩、加密、杀毒之类的操作,这些附加操作没有先后顺序,比如你可以先压缩再加密,也可以先杀毒再压缩,等等。这些附加功能是可选的,有的客户要这些功能,有的不要,有的要其中的几种附加功能等等。怎么设计呢?第一种方案:直接修改这个独立的文件系统 MyFileSys,对于不同的客户实现转载 2013-07-30 17:06:46 · 711 阅读 · 0 评论 -
设计模式C++描述----12.享元(Flyweight)模式
一. 概述在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果没有为字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000次,而实际上我们可以让这一万个字母转载 2013-07-30 17:22:29 · 775 阅读 · 0 评论 -
面向对象设计方法
此方法的要点是辨别现实世界中的对象(object,物体)以及人造的(synthetic)对象。使用对象进行设计的步骤是:1、辨识对象及其属性(方法(method)和数据(data))。2、确定可以对各个对象进行的操作。3、确定各个对象能对其他对象进行的操作。4、确定对象的哪部分对其他对象可见——哪些部分可以是共有(public)的,哪些部分应该是私用(private)的原创 2012-04-03 11:48:06 · 890 阅读 · 0 评论