![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
C++ 23种设计模式
问君能有几多愁~
这个作者很懒,什么都没留下…
展开
-
代理模式
消除对象耦合1.代理模式和状态模式都提供一个代理类(Surrogate).代码与代理类打交道,而做实际工作的类隐藏在代理类背后。当调用代理类中的一个函数时,代理类仅转而去调用现实类中相应的函数。这两种模式是如此相似,从结构上看,可以认为代理模式只是状态模式的一个特例。设想将两者合理地混合在一起组成一个称为代理设计模式,这肯定是一个很具有诱惑力的想法。但是这两种模式的内涵是不一样的。这样做很容易陷入“如果结构相同模式就相同“的思想误区。基本思想:代理类派生自一个基类,由平行地派生自同一个基原创 2020-08-20 17:05:15 · 80 阅读 · 0 评论 -
C++ 23种设计模式 (二)策略模式
(二)策略模式介绍:定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响到用户GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试。策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。详解概念:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得 算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境原创 2020-08-20 16:10:05 · 115 阅读 · 0 评论 -
C++23种设计模式之 装饰模式
装饰模式模式设计原则:单一职责原则就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起, 一个职责的变化可能会削弱或者抑制这个类完成其它职责能力。这种耦合会导制脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。开放――封闭原则软件实体可以扩展,但是不可修改。即对于扩展是开放的,对于修改是封闭的。面对需求,对程序的改动是通过增加代码来完成的,而不是改动现有的代码。 当变原创 2020-06-14 09:54:38 · 191 阅读 · 0 评论 -
C++23种设计模式之一简单工厂模式(一)
C++23种设计模式之一简单工厂模式(一)作用以及解决的问题主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的 virtual 函数得到不同的结果。GOOD:适用于不同情况创建不同的类时BUG:客户端必须要知道基类和工厂类,耦合性差认识我们把简单工厂方法归类到工厂方法中。工厂方法的目的是用来解决具有同一接口(基类)派生类对象的生成问题。尽管可以通过类的构造函数生成对象,但是,如果派生类的数量很大——即使几十个不同的派生类—原创 2020-06-11 18:19:37 · 189 阅读 · 0 评论 -
策略与工厂结合
策略与工厂结合优点:客户端只需访问 Context 类,而不用知道其它任何类信息,实现了低耦合。话不多说:直接上代码。#pragma onceclass COperation{public: int m_nFirst; int m_nSecond; virtual double GetResult() { double dResult = 0; return dResult; }};#pragma once#include "COperation.h"c原创 2020-08-20 16:07:38 · 111 阅读 · 0 评论 -
单列模式设计
单列模式设计1.单列(Singleton)模式是最简单的设计模式,它允许一个类有且仅有一个实例的方法。#include<iostream>using namespace std;class Singleton{static Singleton s;int i; Singleton(int x):i(x){} Singleton&operator=(Singleton&); Singleton(const Singleton&); public:原创 2020-08-20 16:06:33 · 90 阅读 · 0 评论 -
C++23种设计模式——代理模式
代理模式代理模式:为其它对象提供一种代理以控制对这个对象的访问。优点:远程代理,可以隐藏一个对象在不同地址空间的事实虚拟代理:通过代理来存放需要很长时间实例化的对象安全代理:用来控制真实对象的访问权限智能引用:当调用真实对象时,代理处理另外一些事主要解决:在直接访问对象时带来的问题,比如:要访问的对象在远程服务器上。在面向对象系统中,有些对象由于某些原因,直接访问会给使用者或系统带来很多麻烦,可以在访问此对象时加上一个对此对象的访问层。如何解决:增加中间代理层。类图:代码如下#in原创 2020-06-14 16:50:05 · 152 阅读 · 0 评论 -
命令模式
1.命令:选择操作命令模式的结构很简单,但是对于消除代码间的耦合–清理代码–却有着重要的影响从最直观的角度来看,命令模式就是一个函数对象:一个作为对象的函数。通过将函数封装为对象,就能够以参数的形式将其传递给其他函数或者对象,告诉他们在履行请求的过程中执行特定的操作。也可以说命令模式是携带行为信息的信使。#include<iostream>#include<vector>using namespace std;class Command{ public: vi原创 2020-08-20 16:04:51 · 87 阅读 · 0 评论