![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++设计模式
打工的社畜
这个作者很懒,什么都没留下…
展开
-
【C++设计模式】享元模式
模式定义:运用共享技术有效的支持大量细粒度的对象。假设我们要设计一个字体的类,字符的量很大,我们没必要为每一个字符都创建一个字体对象。这时候可以使用享元模式(实现对象池):class Font {private: //unique object key string key;//字体的key //object state //.... public: Font(const string& key){ //..原创 2020-11-24 19:14:17 · 70 阅读 · 0 评论 -
【C++设计模式】单例模式
具体内容可以看这个大哥写的:C++单例模式转载 2020-11-23 19:22:14 · 52 阅读 · 0 评论 -
【C++设计模式】构建器模式
模式定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。该模式和模板方法模式很相似,但是这里使用的地方是在类初始化的过程中。例如我们要造一个房子,那么很有可能造房子的步骤是稳定的(例如先打地基,然后修墙,然后修窗户等等),但是怎么打地基,怎么修墙这些具体步骤可能会有变化,所以我们可以这样设计,将房子类的初始化分几个类来实现:House类:class House{ //....};建造房子的HouseBuilder类:class Hou原创 2020-11-22 16:27:52 · 271 阅读 · 3 评论 -
【C++设计模式】原型模式
模式定义:使用原型实例指定创建对象的种类。然后通过拷贝这些原型来创建新的对象。该模式其实是工厂模式的一种变体模式,仍然以工厂模式中的文件分割器为例,如果文件分割器本身就是一个比较复杂的对象,并且拥有稳定的接口,那么每一次调用Button函数中的分割时,不一定都需要新建一个对象,可以直接克隆即可。Client类class MainForm : public Form{ ISplitter* prototype;//原型对象public: MainForm(ISplit原创 2020-11-22 15:54:17 · 60 阅读 · 0 评论 -
【C++设计模式】工厂模式
模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使得一个类的实例化延迟(目的:解耦合,手段:虚函数)到子类中去。我们还是来看一个实际例子:例如我们要设计一个文件分割的程序,我们在主窗口中点击按钮,实现文件分割的功能。但是我们要分割的文件可能是文本文件,也可能是二进制文件,也可能是视频文件等等,那么我们最初写下的代码就可能像下面一样:MainForm类:class MainForm : public Form{ TextBox* txtFilePa原创 2020-11-19 16:24:50 · 109 阅读 · 0 评论 -
【C++设计模式】桥模式
模式定义:将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立的变化。假设我们需要实现一个这样的功能,有一个能够发送信息的Messager类,可以实现登录、发送消息、发送照片、播放音乐、画图、写入文字、连接等等功能。但是我们可能会在不同的平台(PC端和移动端)实现它,而且实现的版本也是不同的,一个是完美的版本,即以上功能都有,一个是精简版,只有部分功能。那么我们可能写出如下代码:class Messager{public: virtual void Login(string原创 2020-11-18 19:14:29 · 112 阅读 · 0 评论 -
【C++设计模式】装饰器模式
模式定义:动态(组合)的给一个对象增加一些额外的职责,就增加功能而言Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。假设我们需要设计如下一个功能的程序:1.对各种流的读取、写入和定位2.添加对各种流的加密以及缓冲或者又加密又缓冲的功能。那么我们最初设计的类(版本一)可能如下://业务操作class Stream{public: virtual char Read(int number)=0; virtual void Seek(i原创 2020-11-18 16:56:33 · 134 阅读 · 0 评论 -
【C++设计模式】观察者模式
模式定义:定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生变化时,所有依赖与它的对象都得到通知并自动更新。UML图:代码示例:#include <iostream>#include <string>#include <list>using namespace std; class Subject;//抽象观察者class Observer{protected: string name; Su.原创 2020-11-17 18:17:37 · 76 阅读 · 0 评论 -
【C++设计模式】策略模式
模式定义:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立与使用它的客户程序(稳定)而变化(扩展,子类化)例如我们要设计一个计算各个国家税费的程序:enum TaxBase { CN_Tax, US_Tax, GR_Tax};class SalesOrder{public: double CalculateTax() { //... if (tax == CN_Tax) { //CN....... } else i原创 2020-11-17 16:32:33 · 156 阅读 · 0 评论 -
【C++设计模式】模板方法模式
模板方法:定义一个操作中的算法骨架(稳定),而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤(变化)。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了一个很好的代码复用解决方案。Libary类:class Libary{public: void run()//稳定的算法框架 { step1(); step2(); step3(); step4(); step5(); }private: void step原创 2020-11-16 17:13:50 · 60 阅读 · 0 评论