命令模式 发表于 2016-08-15 | 分类于 设计模式 字数统计: 1,639 | 阅读时长 ≈ 8 一个遥控器问题假设我们有一个遥控器,这个遥控器上有多组的开关按键,每组按键对应着一个卡槽,卡槽是可编程的,能够控制一个电器。而我们有很多的电器,那么我们应该怎样设计这个遥控器呢? 一个无脑的方法当然就是对于每个卡槽,我们直接设置它为指定电器的开关。 123456789101112131415161 ... 阅读全文 »
顺序容器 发表于 2016-08-15 | 分类于 编程语言 字数统计: 758 | 阅读时长 ≈ 3 顺序容器顺序容器主要有以下的几种 vector 可变长度数组 deque 双端队列 list 双向链表 forward_list 单向链表 array 固定大小数组 string 字符串容器 数据结构中最常用的数组, ... 阅读全文 »
单例模式 发表于 2016-08-05 | 分类于 设计模式 字数统计: 764 | 阅读时长 ≈ 3 单例模式可以算是最简单的设计模式了。它表示一个类创建一个对象。 正常来讲,对于类,我们可以new出多个对象,那么如何能够实现只允许创建一个对象呢? 我们先看一个问题,为什么可以用new来new一个类的对象呢?这是因为类中定义了public的构造函数。那么如果我们将构造函数设置为private的呢?那 ... 阅读全文 »
虚函数 发表于 2016-07-30 | 分类于 C++ 字数统计: 1,546 | 阅读时长 ≈ 7 虚函数面向对象语言,有三个最主要的特性,继承,封装,多态。其中多态是实现就是依仗虚函数来实现的。所谓多态实际上就是子类对象指针赋值给父类指针,在运行时确定具体的对象类型。 如下所示:我们定义了两个类如下:123456789101112131415161718192021222324252627282 ... 阅读全文 »
工厂模式 发表于 2016-07-25 | 分类于 设计模式 字数统计: 3,054 | 阅读时长 ≈ 14 在之前的章节中,我们提到了要针对接口编程,所以在DuckDemo中,我们利用了接口的多态的特性,可以动态的改变对象。但是这样也是存在一定的问题的,下面我们就来分析这个问题。 一个pizza引发的血案假设我们开了一个pizza店,我们提供了一个程序能够让顾客自动下单订购pizza,那么我们的代码可以如 ... 阅读全文 »
装饰者模式 发表于 2016-07-20 | 分类于 设计模式 字数统计: 807 | 阅读时长 ≈ 3 一杯cafe问题假设我们需要设计一个cafe订单系统,用户可以选择coffee类型以及需要添加的小料,然后计算出它的价格,那么最朴素的方法就是创建一个coffee基类,然后不同类型的coffee继承自这个基类,然后计算他的价格,类图可以如下所示: 但是这样也是有个问题的,这会导致类爆炸(因为添加每 ... 阅读全文 »
观察者模式 发表于 2016-07-11 | 分类于 设计模式 字数统计: 1,217 | 阅读时长 ≈ 5 气象监测应用假设我们有来自气象站的数据,我们需要设计一个程序将这些气象数据显示在3个不同的公告板上,当气象站的数据更新时,公告板上的数据也要随着更新。我们应该怎样设计这个类呢? 我们需要一个measurementsChanged方法,当气象站的数据变化时,能够调用这个方法,通知系统数据发生变更,然后 ... 阅读全文 »
类 发表于 2016-07-07 | 分类于 C++ 字数统计: 2,511 | 阅读时长 ≈ 11 类类实际上就是我们自己定义的一种数据类型,本质上来讲它和int,float什么的没有什么不同。 在C语言中,我们一般用struct来定义我们自己的类型,在C++中我们引入了类的概念,一般用class来定义自己的类型。实际上这两个概念很像,只不过class多了一些东西,比如可以定义private的类型 ... 阅读全文 »
策略模式 发表于 2016-07-01 | 分类于 设计模式 字数统计: 1,467 | 阅读时长 ≈ 7 一个鸭子的应用假设我们需要设计一个鸭子的应用,可以生成各种各样的鸭子,那么根据面向对象的做法,我们需要首先创建一个鸭子的基类,然后再利用继承的方式来生成各种各样的鸭子类型,如下所示:12345678910111213141516171819202122232425262728293031323334 ... 阅读全文 »