大话模式C++版学习笔记
hp_cpp
这个作者很懒,什么都没留下…
展开
-
建造者模式
建造者模式(Builder),将一个一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的对象。举例:画一个小人,需要画头、身体、左手、右手、左脚和右脚。我们先定义一个抽象的建造人的类,来把这个过程给稳定住,不让任何人遗忘其中的任何一步。当我们需要画一个瘦小人和一个胖小人的时候,我们还需要建造者模式中的一个很重要的类,指挥者(Director)来控制建造过程,也用它来隔离用户与建造...原创 2020-03-30 22:42:10 · 127 阅读 · 0 评论 -
适配器模式——对象适配器
适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于不兼容而不能一起工作的那些类可以一起工作。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。在Gof的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式,类适配器通过多重继承对一个接口与另外一个接口进行匹配,其他一些语言不支持多重继承,这里我们主...原创 2020-03-30 20:34:07 · 407 阅读 · 0 评论 -
代理模式和适配器模式的相似以及不同之处
代理模式UML图表示:代码举例:适配器模式UML图表示代码举例:target.h#pragma once#include <iostream>class Target{public: virtual ~Target() {} virtual void Request() { std::cout << "普通请求..." <<...原创 2020-03-29 20:35:36 · 1090 阅读 · 0 评论 -
代理模式
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问Subject定义RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方使用Proxy。isubject.h#pragma onceclass ISuject{public: virtual ~ISuject() {} virtual void Request() = 0...原创 2020-03-29 18:03:53 · 119 阅读 · 0 评论 -
策略模式之排序算法
参考:策略模式-排序算法C++ 策略模式调用不同的排序算法排序与设计模式原创 2020-03-29 17:17:24 · 1305 阅读 · 0 评论 -
简单工厂、工厂方法和抽象工厂的区别
一、简单工厂举例:一个工厂要生产两种品牌的车,车的功能是可以用来开。首先定义一个接口,车是用来开的。icar.h#pragma onceclass ICar{public: virtual ~ICar() {} virtual void drive() = 0;};奔驰车是这样开的:benz.h#pragma once#include "icar.h"#incl...原创 2020-03-28 07:47:51 · 327 阅读 · 0 评论 -
在C++中实现委托(Delegate)——普通函数(一)
为了一步步实现委托,同时也为了方便将目标问题拆解,我们采用先从普通函数入手,再到成员函数,逐步实现类似于C#中的委托。首先,明确目标:一、目标#include <iostream>#include "CMultiDelegate.h"#include "CStaticDelegate.h"void Say(){ printf("void Say(): Hello wo...原创 2020-03-23 12:06:53 · 1113 阅读 · 0 评论 -
观察者模式(4)——总结
观察者模式也叫发布——订阅模式(Publish/Subscribe)模式。原创 2020-03-22 17:52:50 · 135 阅读 · 0 评论 -
观察者模式(3)——解耦实践二
现在如果通知人变了,那么原来的同事类中就需要修改代码,这违反了开闭原则,也不利于维护代码。应该是通过新增代码去增加功能,而尽量减少修改代码来增加功能。回到我们刚才的例子,现在我们把同事类中的前台秘书换成抽象类,那么是不是可以减少耦合?增加抽象的通知者接口:Subject.h#pragma once#include <string>class Observer;clas...原创 2020-03-22 17:49:29 · 155 阅读 · 0 评论 -
观察者模式(2)——解耦实践一
首先是增加抽象的观察者,看门王大爷的事情,后面再说。先解决可以增加打游戏的同事需求。增加了抽象类Observer:Observer.h#pragma once#include <string>class Secretary;class Observer{public: Observer(std::string name, Secretary *sub) { ...原创 2020-03-22 17:19:29 · 179 阅读 · 0 评论 -
观察者模式(1)——双向耦合
在学习《大话设计模式》的时候,将书上C#版本的代码翻译成C++的代码,合上书后,再回想书中的内容和观察者模式,感觉还是不太清楚,我就写博客记录一下,同时也可以梳理自己学到的东西。书中是这样的构想的场景是这样的:前台秘书是一个童子喆(zhe)(别读成童子ji了),同时们请她帮忙,老板进门的时候,通知他们一下。这是一个典型的观察者模式的应用场景,前台秘书类:Secretary.h#pr...原创 2020-03-22 16:54:32 · 779 阅读 · 0 评论