
设计模式
a_freshbird
这个作者很懒,什么都没留下…
展开
-
设计模式--代理模式
定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问。类图如下:示例代码://代理模式//a 类包含B类,a b类共同实现相同的接口class Subject{public: virtual void saleBook() = 0;};//实体书店class RealSubjectStore:public Subject{public: virtual void saleBook() { cout <<"sale book"<&原创 2021-10-19 22:57:18 · 76 阅读 · 0 评论 -
设计模式--组合模式
定义:允许将对象组成树形结构来表现 “整体/部分” 层次结构。组合能让客户以一致的方式处理个别对象及对象组合。说白了,就是类似于树形结构。 只是它要求子节点和父节点都具备统一的接口。类图如下:示例如下:比如我们常见的电脑上的目录,目录下面有文件夹,也有文件,然后文件夹里面还有文件及文件夹。这样一层层形成了树形结构。示例代码如下:#include <iostream>#include <stdio.h>#include "string"#includ..原创 2021-10-10 23:16:39 · 77 阅读 · 0 评论 -
迭代器模式
定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又暴露其内部的表示。类图如下:示例代码typedef int Object;const int SIZE = 5;//迭代器基类class MyIterator{public: virtual void First() = 0; virtual void Next() = 0; virtual bool IsDone() = 0; virtual Object CurrentItem() = 0;};//集合.原创 2021-10-10 22:57:32 · 65 阅读 · 0 评论 -
设计模式--模板模式
模板模式:定义一个算法的步骤,并允许子类为一个或多个步骤提供实现。模板模式很简单,类图如下:示例:星巴克做饮料时,都有些固定的步骤。比如调咖啡的步骤为:1.把水煮沸 2.用沸水冲咖啡粉 3.把咖啡倒进杯子 4.加糖和牛奶调茶的步骤为:1.把水煮沸 2.用沸水泡茶叶 3.把茶倒进杯子 4. 加柠檬。两种饮料制作方法固定步骤都一样,不同的是步骤2 和4 ,那么我们可以把步骤做成固定的算法模板,而步骤2 4做成虚拟的方法,让子类不实现。示例代码如:class Drin..原创 2021-10-10 10:45:51 · 78 阅读 · 0 评论 -
设计模式--外观模式
外i观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。模型如下图示例:假设理财的时候,有股票、期货及债权可供投资,如果我们想进行稳定投资,那么就买债权,想高收益,买股票和期货。外部使用的时候,需要自己来调用子系统类。如果我们做个基金接口,那么外部直接调用基金这个类就可以了。示例代码如下://股票class Stock{public: void BuyStock() { cout <<"投资股票"<&.原创 2021-10-10 10:29:00 · 73 阅读 · 0 评论 -
适配器模式
定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。例如之前举例子的鸭子,鸭子基类可以飞,可以叫。但是火鸡不属于鸭子,它可以叫,但是飞的距离不如鸭子远,方法里飞行定义也不一样,这时,就需要写个适配器来把火鸡伪装成鸭子。示例class Duck{public: virtual void fly() = 0; virtual void quake() = 0;};class Turkey{public: void turkeyFly()原创 2021-10-07 23:24:51 · 97 阅读 · 0 评论 -
设计模式--单例模式
单例模式:确保一个类只有一个实例,并提供一个全局访问点。在实际工作中,写控制软件时候,我都会写一个控制中心类,所有的控制都通过这个控制中心类来操作,所以这个控制类只允许实例一个对象。实现单例模式有两种:一种是懒汉式,一种是饿汉式。懒汉式 实例如下:class Single{private: Single() { cout<<"begin create"<<endl; Sleep(1000); cout <<"end create"&l原创 2021-10-07 12:48:27 · 99 阅读 · 0 评论 -
装饰者模式
装饰者模式又叫包装模式,把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要添加功能时,只需要有选择、按顺序的使用装饰功能来包装对象。设计模式如下图:一个简单的例子:一辆小汽车,基本功能是可以跑。但是我要对这个汽车增加功能,比如让它可以飞翔,让它可以在水里跑,或者其他功能。当基类的汽车,需要什么功能,我就添加什么功能。把功能设计成类。设计代码如下:class car{public: virtual void show() = 0;};class .原创 2021-10-03 19:54:25 · 88 阅读 · 0 评论 -
观察者模式
观察者模式:定义了对象之间的一对多依赖,当一个对象改变其状态时,它所有的依赖者都会收到通知并自动更新。应用场景举例:例如公司的老板行踪,秘书都知道,那么员工想知道老板的行踪,就通过秘书,多个员工就形成了观察者(observer),老板秘书就成了主题(subject),当老板的行踪发生变化时,秘书要通知各个员工。代码示例://老板秘书 为主题类class SubSecurity;//员工 为观察类class Observer{public: Observer(SubSe原创 2021-10-03 19:21:58 · 140 阅读 · 0 评论 -
Head First设计模式--策略模式
最近在看设计模式,此文章仅为记录自己读后的理解。策略模式:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。设计原则:多用组合,少用继承。从鸭子应用说起:某公司准备做一套相当成功得模拟鸭子游戏。游戏会有各种鸭子,可以做各种动作,比如游泳、呱呱叫。此系统设计了一个鸭子类,让各种鸭子继承此类。类结构如下:各方法都采用虚函数,由子类来继承并实现。如果要添加鸭子飞行的动作,也写成虚函数的话。会造成不具备飞行的鸭子类也要实现此虚函数,导致代码修改量比较大.原创 2021-09-28 15:15:30 · 255 阅读 · 0 评论