![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《大话设计模式》
东篱_
Never forget why you started,and your mission can be accomplished.
展开
-
《大话设计模式》C++实现:02 策略模式(三)—— 策略模式
文章目录1、优缺点1.1、优点1.2、缺点1.3、优化2、代码2.1、结果2.2、代码2.2.1、Strategy.h2.2.2、Context.h1、优缺点1.1、优点相较于简单定义各算法,将各算法组织起来并进行了一定的封装,方便了不同算法之间的切换。笔者感受:使用类C操控类A继承体系A1,A2,A3中公有对外暴露接口。利用一个额外的类,(1)将strategy抽象策略基类,作为额外类的入参;(2)将strategy抽象策略基类作为额外类的成员变量,利用多态原理,接收外面传来的具体抽象策略。原创 2020-11-18 21:24:54 · 165 阅读 · 0 评论 -
《大话设计模式》C++实现:02 策略模式(四)——(策略模式+简单工厂)
文章目录1、好处2、代码2.1、结果2.2、代码2.2.1 Strategy.h2.2.2、StrategyFactory.h1、好处策略模式+简单工厂:可以完全将策略继承体系与用户端完全剥离开来,将策略继承体系完全封装起来,对用户完全不可见。抽象总结一下:(1)类C里面通过没什么信息含量的枚举入参,利用简单工厂生成类A继承体系中的各子类A1、A2、A3。同时,用基类A作为类C的成员变量,接一下刚生成的类A的子类。(2)类C对外统一暴露一个接口,该接口中,类C的成员变量类A调用继承体系公有对外暴露原创 2020-11-18 21:08:11 · 182 阅读 · 0 评论 -
《大话设计模式》C++实现:02 策略模式(一)商场促销实例-初始版本(switch_case)
文章目录1. 什么是策略模式?2. 策略模式的适用场景?2.1 优缺点2.1.1 好处2.1.2 当心2.2 何时使用?3. 怎样使用策略模式?3.1 方法3.2 UML类图演进3.2.1 version1 (本篇博文的demo)4. 实例4.1 结果(结论先行)4.2 具体实现5. 策略模式-相关链接1. 什么是策略模式?策略模式(strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。2. 策略模式的适用场景?2.1 优缺点2.原创 2020-11-18 20:36:51 · 372 阅读 · 0 评论 -
《大话设计模式》C++实现:24 职责链模式(二)请假加薪实例-改进
文章目录1. UML类图2. 实例2.1 结果(结论先行)2.2 具体实现2.2.1 Request.h2.2.2 IManager.h2.2.3 CommonManager.h2.2.4 Majordomo.h2.2.5 GeneralManager.h1. UML类图2. 实例2.1 结果(结论先行)main.cpp#include "IManager.h"#include "CommonManager.h"#include "Majordomo.h"#include "Genera原创 2020-10-05 23:01:37 · 182 阅读 · 0 评论 -
《大话设计模式》C++实现:24 职责链模式(三)抽象总结
文章目录1. UML类图抽象2. 实例2.1 结果(结论先行)2.2 具体实现2.2.1 IHandler.h2.2.2 ConcreteHandler1.h2.2.3 ConcreteHandler2.h2.2.4 ConcreteHandler3.h1. UML类图抽象2. 实例2.1 结果(结论先行)main.cpp#include "IHandler.h"#include "ConcreteHandler1.h"#include "ConcreteHandler2.h"#incl原创 2020-10-05 22:11:31 · 149 阅读 · 0 评论 -
《大话设计模式》C++实现:24 职责链模式(一)请假加薪实例-初始版本
文章目录1. 什么是职责链模式?2. 职责链模式的适用场景?2.1 优缺点2.2 何时使用?3. 怎样使用职责链模式?3.1 方法3.2 UML类图演进3.2.1 version1v1 存在的问题v1 重构方向4. 实例4.1 结果(结论先行)4.2 具体实现4.2.1 Request.h4.2.1 Manager.h1. 什么是职责链模式?职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免球球的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这原创 2020-10-04 20:42:00 · 227 阅读 · 0 评论 -
《大话设计模式》C++实现:23 命令模式(三)抽象总结
1. UML类图抽象2. 实例2.1 结果(结论先行)main.cpp#include "Receiver.h"#include "ICommand.h"#include "ConcreteCmd.h"#include "Invoker.h"void test(){ CReceiver* pRcv = new CReceiver(); ICommand* pCmd = new ConcreteCmd(pRcv); Invoker* pInvk = new Invoker();原创 2020-10-04 14:27:48 · 1680 阅读 · 3 评论 -
《大话设计模式》C++实现:23 命令模式(二)进阶版2
1、场景说明完善了 《大话设计模式》C++实现:23 命令模式(二)进阶版 中删除订单功能。2、代码2.1、结果main.cpp//松耦合方式2: 进阶版2#include "ICommand.h"#include "BakeMuttonCmd.h"#include "BakeChickenWingCmd.h"#include "Waiter.h"void test2(){ CBarbecuer* boy = new CBarbecuer(); ICommand* pBake原创 2020-10-04 12:06:14 · 272 阅读 · 0 评论 -
《大话设计模式》C++实现:23 命令模式(二)进阶版
文章目录1、场景说明2、代码2.1、结果2.2、代码1、场景说明相较基础版:《大话设计模式》C++实现:23 命令模式(一)基础版:增加了时间、加订单,删订单(只留了接口)、一次通知全部的菜单的功能。2、代码2.1、结果//松耦合方式2: 进阶版#include "ICommand.h"#include "BakeMuttonCmd.h"#include "BakeChickenWingCmd.h"#include "Waiter.h"void test2(){ CBarbe原创 2020-09-30 20:41:30 · 217 阅读 · 1 评论 -
《大话设计模式》C++实现:23 命令模式(一)基础版
1. 什么是命令模式?命令模式(Command):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。2. 命令模式的适用场景?2.1 优缺点优点:第一、能较容易地设计一个命令队列第二、在需要的情况下,可以较容易地将命令计入日志第三、允许接收请求的一方决定是否否决请求第四、可以容易地实现对请求的撤销和重做第五、由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。最关键优点:命令模式将请求一个操作的对象与指导怎原创 2020-09-29 23:31:27 · 326 阅读 · 0 评论 -
《大话设计模式》C++实现:01 简单工厂模式(优化,使用宏注册工厂)
一、代码1、结果1.1 main.cpp#include "Operation.h"#include "OperationFactory.h"#include "OperationAdd.h"#include "OperationSub.h"#include "OperationMul.h"#include "OperationDiv.h"void test(){ double numA = 200, numB = 100; cout << "A = " <<原创 2020-08-21 23:52:50 · 552 阅读 · 0 评论 -
《大话设计模式》C++实现:01 简单工厂模式
文章目录1. 什么是简单工厂模式?2. 简单工厂模式的适用场景?2.1 优点2.2 缺点3. 怎样使用简单工厂模式?3.1 方法3.2 UML类图4. 实例4.1 结果(结论先行)4.2 具体实现4.2.1 操作符集成体系代码4.2.2 简单工厂的静态接口1. 什么是简单工厂模式?当出现批量化的产品时,使用单独的类创建每个产品,实现去实例化对象。2. 简单工厂模式的适用场景?2.1 优点1、降低了客户与具体实现的耦合(相较不使用简单工厂而言)。封装了细节,客户只需调用工厂接口,不必关心如何创建产原创 2020-08-21 22:42:32 · 329 阅读 · 0 评论 -
《大话设计模式》C++实现:08 工厂模式
先上代码,后续补充~~1. 什么是迭代器模式?2. 迭代器模式的适用场景?3. 怎样使用迭代器模式?4. 实例1. 结果(结论先行)#include <iostream>#include "AddFactory.h"#include "SubFactory.h"#include "MulFactory.h"#include "DivFactory.h"#include "Operation.h"using namespace std;void test0(){原创 2020-08-16 23:40:30 · 311 阅读 · 0 评论 -
《大话设计模式》C++实现:20 迭代器模式
1、什么是迭代器模式?1、迭代器模式(Iterator),提供了一种顺序访问一个聚合对象中各个元素,而又不保留该对象的内部表示的方法。2、简单来说,迭代器模式,分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地党文集合内部的数据。3、类似于 foreach in ,它就是不需要知道集合对象是什么,就可以遍历所有对象的循环工具。2、迭代器模式的适用场景?1、当需要访问一个聚集对象,且,不管这些对象是什么,都需要遍历的时候,应该考虑迭代器模式。原创 2020-07-18 19:59:30 · 252 阅读 · 0 评论 -
《大话设计模式》C++实现:07 代理模式(二)
3、怎样使用代理模式?初级,boy找代理追girl:《大话设计模式》C++实现:07 代理模式(一)升级,公共接口,真实实体,代理4、实例1、ISubject.h#pragma onceclass ISubject{public: virtual void Request() = 0;};2、RealSubject.h#pragma once#include "ISubject.h"#include <iostream>using namespace std;原创 2020-07-17 20:49:25 · 162 阅读 · 0 评论 -
《大话设计模式》C++实现:07 代理模式(一)
1、什么是代理模式?简而言之:代理模式就是在访问对象时,引入一定程度的间接性,因为这种间接性,可以附加多种用途。GoF描述:代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。2、代理模式的适用场景?3、怎样使用代理模式?初级,boy找代理追girl4、实例1、IGiveGift.h 公共接口函数#pragma onceclass IGiveGift{public: virtual void giveDools() = 0; virtual void give原创 2020-07-15 22:46:27 · 196 阅读 · 0 评论 -
《大话设计模式》C++实现:14 观察者模式(一)
其他后续跟上,先埋个坑,改天填坑~~1、什么是观察者模式2、为何要是用观察者模式3、如何才能用好观察者模式?4、怎样使用观察者模式?4.1 观察者模式的演进双向耦合单向解耦(解耦 具体观察者与 通知者)双向解耦(解耦 具体观察者 与 具体通知者)5、实例...原创 2020-07-10 09:17:06 · 264 阅读 · 0 评论 -
《大话设计模式》C++实现:17 适配器模式
1、 适配器模式是什么?Adapter:将一个类接口为转化作为客户希望的另一个接口。使得原本而由于接口不兼容而不能一起工作的那些类可以一起工作。2、 为何要使用适配器模式?在软件开发中,系统的数据和行为都正确,但接口不符时,我们需要考虑适配器,目的:是控制范围之外的一个原有对象与某个接口匹配。主要应用在希望服用一些现存的类,但是接口又与复用环境要求不一致的情况。如:在早期对代码笃用一些功能等应用上很有实际价值。3、 如何使用适配器模式?简单的UML图:4、 怎样才能用好适配器模式?(1原创 2020-07-07 23:05:02 · 242 阅读 · 0 评论