![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
C_core
陷阵之志,有死无生.
展开
-
设计模式:Factory Method
工厂方法-Factory Method 动机-Motivation 在软件系统中,经常面临创建对象的工作,由于需求的变化,需要创建的对象的具体类型也经常变化。 例子 文件分割器 代码 class ISplitter{ public: virtual void split()=0; virtual ~ISplitter(){} }; class BinarySplitter : public ISplitter{ }; class TxtSplitter: public ISpl原创 2020-05-29 14:03:54 · 101 阅读 · 0 评论 -
设计模式:Bridge
Bridge-桥模式 由于某些类型的固有实现逻辑,使得类型具有多个变化维度。 考虑这个例子,需要实现通信设计。 设置有Message类型,有Login、SendMessage、SendPicture,以及PlaySound、DrawShape、WriteText、Connect。 平台支持方面,需要支持PC平台设计,同时需要支持Mobile平台设计。 平台间的差异在于播放声音、图形绘制、写入文本、链接网络等功能的不同,考虑实现PC、Mobile继承Message,并重写上述功能函数。 之后,需求需要实现平台原创 2020-05-29 12:45:28 · 206 阅读 · 0 评论 -
设计模式:Decorator
Decorator-装饰模式 装饰模式用于处理,软件组件设计中的责任划分不清晰,导致子类通过继承得到大量的冗余重复代码,代码的急剧膨胀问题。装饰模式关键在于划清责任。 考虑设计一个IO库、相关流操作。其中有文件流,网络流、内存流等,操作有对流的加密,缓存等。 考虑设计一个Stream抽象基类,FileStream、NetWorkStream、MemoryStream继承与Stream基类。 而加密操作需要加密具体的流,而不是抽象上的流,所以继承自FileStream、NetWorkStream、Memory原创 2020-05-29 12:12:50 · 186 阅读 · 0 评论 -
设计模式:Observer/Event
Observer/Event-观察者模式 在软件构建过程中,我们可能需要为某些对象建立通知依赖关系,当一个对象的状态发生改变,所有的依赖对象(观察者)都将得到通知。 如下例子,考虑实现一个文件分割器,需要将文件分割进度通过某种控件显示出来。 class MainForm : public Form { TextBox* txtFilePath; TextBox* txtFileNumber; ProgressBar* progressBar; public: void Button1_Click(原创 2020-05-28 13:25:14 · 148 阅读 · 0 评论 -
设计模式:Strategy
Strategy-策略模式 税务计算 根据不同国家的税率进行不同算法计算 enum TaxBase { CN_Tax, US_Tax, DE_Tax, FR_Tax //更改 }; class SalesOrder{ TaxBase tax; public: double CalculateTax(){ //... if (tax == CN_Tax){ //CN***********原创 2020-05-28 12:45:51 · 117 阅读 · 0 评论 -
设计模式:Template Method
Template Method 在程序的开发过程中可以将开发者分为类库开发人员和应用程序开发人员。 一般情况下,由类库开发人员实现基本功能函数,再有应用程序开发人员使用类库实现逻辑组装,考虑如下例子。 //程序库开发人员 class Library{ public: void Step1(){ //... } void Step3(){ //... } void Step5(){ //... } }; //应用程序开发人员 class Applicat原创 2020-05-28 10:58:30 · 77 阅读 · 0 评论