随笔分类 - [070_设计模式]
摘要:序言 建造者模式,这是一个无法从字面上推测出类图的模式,但是有了前面的模板方法模式的基础,在理解建造者模式上,会觉得很简单。我也尽量多用图来解释建造者模式,因为今天在看别人的文章的时候,我发现自己很懒,懒得看那一堆堆的文字。文字固然可以灵巧的组成散文诗歌,但是对于时间仓促,浮躁的程序员来说,如果不是需要这门技术,自己根本没闲心去看别人的文字。唉,序言有点罗嗦了,估计80%的人都不会完整的看完序言,不过没关系,看正文就行。 正文 1. 在脑子里形成一个需求图 稍微解释一下这个图,这个图定义了一个产品的模板,姑且叫产品这个名字吧!其中“执行”这个行为是“操作1”、“操作2”、“操作3”这三...
阅读全文
摘要:序言 昨天学习了抽象工厂模式,所谓的抽象工厂模式,是为了应对产品线升级和隔离平台差异使用的设计模式。具体请参照博主上一篇博客。 今天要学习的是模板方法模式,可以说,这个模式太简单了,非常简单,你只需瞥一眼就能知道它的真谛,它的精髓。一言以蔽之。 正文 1. 定义定义一个操作中的算法的框架,而将一些步骤延迟到子类,使得子类可以不改变现有算法的结构即可重定义该算法的某些特定步骤。 用通俗的话来讲,举个例子,诸葛亮在指挥一场战役的时候,注意,是战役,战役是有很多场小战斗组成的。亮哥在谋划一场战役的时候,肯定是说:马谡,你守第一关;魏延,你守第二关;关羽,你守第三关;赵子龙,你守第四关。我们把马谡..
阅读全文
摘要:悲剧,编辑的时候弄丢了,还能找回来啊?? 序言 昨天学习了抽象工厂模式,所谓的抽象工厂模式,是为了应对产品线升级和隔离平台差异使用的设计模式。具体请参照博主上一篇博客。 今天要学习的是模板方法模式,可以说,这个模式太简单了,非常简单,你只需瞥一眼就能知道它的真谛,它的精髓。一言以蔽之。 正文 1. 定义定义一个操作中的算法的框架,而将一些步骤延迟到子类,使得子类可以不改变现有算法的结构即可重定义该算法的某些特定步骤。 用通俗的话来讲,举个例子,诸葛亮在指挥一场战役的时候,注意,是战役,战役是有很多场小战斗组成的。亮哥在谋划一场战役的时候,肯定是说:马谡,你守第一关;魏延,你守第二关;关羽,你.
阅读全文
摘要:序言 《设计模式之禅》看到第78页了,继续坚持啊!作为一个创建型的设计模式,工厂方法模式被使用到的频率相当高,因此,这个模式的学习那是相当有价值的。那么,这个模式的定义是怎样的呢?这个模式的实现是怎样的呢?这个模式的作用是怎样的呢?笔者将尽一切可能为读者解释清楚,当然,如果没有解释清楚的,可以一起讨论。这样的学习才有互动性,才能不断进步嘛!元芳,你怎么看? 正文 1. 你是怎么创建对象的?(最蠢的方法)1 // 第一种2 MyObject mo;3 4 // 第二种5 MyObject *mo = new MyObject(); 靠,躺着也中枪!是的,我就是这么创建对象的啊!用什么创建什么..
阅读全文
摘要:序言 今天开始学习23种设计模式的第一个模式——单例模式,以前在网上也看过不少人写的单例模式博文,也算已经吸收了不少。今天看《设计模式之禅》里对设计模式的讲解,作者说的还挺细致的。唯一可惜的是作者用java讲解单例模式,而我自己从去年工作后就用的是C++,本着学什么用什么的原则,我就用C++来记录一下学习成果吧。希望这篇博客能把我学到的分享给跟我一样在园子的读者。 正文1. 单例模式的现实场景 作者开篇用皇帝来类比单例,而我有个更好的例子,且听我一一道来。太阳系中有一个恒星和九大行星,至少我上学的时候是九大行星,后来因为冥王星太小了,被除名了。可是我还是觉得九这个数字比较好,比如九大行星,九.
阅读全文
摘要:序言 开闭是什么意思呢?显然这是两个词的合体,即开放和闭合的意思。那对什么开放呢?扩展。那有对什么闭合呢?修改。 软件开发最可怕的是什么?是变化。记得以前看过一个笑话,说一个程序员累昏倒了,在医院昏迷了好几天,家人哭的稀里哗啦的,老婆孩子在旁边怎么叫就是不醒。一天他同事来看他,第一句话就是对着躺在病床上的他说:需求又变了。奇迹发生了,那个程序员一下从病床上做起来了。 只是一个笑话而已,但是说明了变化对软件开发过程的影响,有些变化可能要修改逻辑,而有些变化甚至需要修改框架。总之,对于软件开发来说,变化是永恒不变的话题。 设计模式六大原则中的开闭原则是其他五种原则的高度概括,用作者的话来说,是精神
阅读全文
摘要:序言 记得一年前看设计模式的时候,走马观花,囫囵吞枣。每一个概念都没有去仔细想,只是知道某某设计模式能干什么事。今天看到【迪米特原则】倍感莫名其妙,你说你叫接口隔离原则吧,我可以一个词一个词的去解析;你说你叫单一职责吧,看名字我就能知道什么用。你非得叫个什么迪米特原则,让人莫名其妙,跟里氏替换原则差不多,不过里氏替换至少还有个替换二字。今天我们就来看看这个迪米特原则到底是个什么原则吧.正文 迪米特,英文demeter,网上说是天空之神跟时光女神的女儿,是丰产、农林女神。这个天空之神跟时光之神还有一个叫宙斯(第三代神王)的儿子和一个叫哈德斯(冥界之主神)的儿子。这个宙斯跟迪米特,也就是自己的二姐
阅读全文
摘要:序言 不得不说,我又看到一个比较坑爹的原则,因为它又是一个把一个类变两个,两个变四个的原则。在单一职责原则里,我们为了把不同的职责分开,把一个类抽象出了n个接口,本文的接口隔离原则又是一个抽象多接口的原则,我只能对天长叹:我不就是写个类嘛!你打算拆出多少接口出来啊? 那到底接口隔离原则抽象出来的接口跟单一职责抽象出来的接口有什么关系呢?接口隔离到底是一个什么概念呢?正文一、接口隔离的概念 要理解这个概念,首先,我们理解一下什么是接口。学过java的人,肯定很自然的说出来:interface定义的就是接口。是的,这是其中一种接口,我们叫做类接口。它是对类的抽象。 那么除了类接口还有其他接口吗?有
阅读全文
摘要:序言 依赖倒置,这个概念看起来很玄乎,其实很简单。这也是我看所有技术书的心态,在心态上战胜这本书,那么它的内容,也就能很容易理解了。依赖倒置的英文定义如下: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions。 英文不给力的自动跳过吧。这个原则的意思就是,代码要依赖于抽象,而不依赖于
阅读全文
摘要:序言本节作者用了很大的篇幅来阐述自己对里氏替换原则的理解,而且代码片段也相当翔实。笔者阅读该节之后,认为该节的核心内容可以归结如下:1. 里氏替换原则的定义2. 里氏替换原则的规范里氏替换原则的定义 里氏替换原则的定义有两种: 第一种(作者认为是最正宗的,但是却是理解起来稍微有点绕的)如果对于每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换为o2时,程序P的行为没有发生变化,那么类型S就是类型T的子类。 第二种(理解起来最方便的)所有使用基类的地方必须能透明的使用其子类的对象。里氏替换原则的规范1. 子类必须完全实现父类的方法2. 子类可以有自己
阅读全文
摘要:序言 《设计模式之禅》,与这本书结缘是在大三下学期,到图书馆借书的时候,看到一本很新的书,书名带个“禅”字,而当时又比较迷恋乔布斯。于是,不管它写的什么乱七八糟的内容就果断借着,拿回宿舍看。接着,放暑假期间,到金蝶实习,就把这本书带着看,怀着装逼的心态。整个实习两个月期间,这本书基本上没翻过,相反的,却把当时火起来的《山楂树之恋》给看了一遍。实习完回校,果断又把书还回去了。 今天,我已经快工作一年半了,之前每每想拿起这本书读的时候,总觉得没到火候。现在我觉得似乎到火候了,自己对设计模式有强烈的渴望,有强烈的需求。今天,拿起这本书,一定要老老实实的读完它。单一职责原则 1. 作者在讲解这一原则的
阅读全文
摘要:1 /** 2 * 设计模式:单例模式 3 * 模式作用:为类提供全局唯一的对象,通常用于工具类或保存程序运行数据 4 **/ 5 #include <iostream> 6 using namespace std; 7 8 class Singleton{ 9 private:10 Singleton(){11 cout<<"Initialize Singleton"<<endl;12 }13 static Singleton *instance;14 15 public:16 static Singleton* getInstanc.
阅读全文