![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
雪是无声雨
在秃头的路上顶风行走中......
展开
-
C++设计模式-命令模式
命令模式-行为变化模式定义:将一个请求(行为)封装为一个将对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。----《设计模式》GOF类图:应用场景:系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。请求调用者无须知道接收者的存在,也无须知道接收者是谁,接收者也无须关心何时被调用。系统需要在不同的时间指定请求、将请求排队和执行请求。一个命令对象和请求的初始调用者可以有不同的生命期,换言之,最初的请求发出者可能已经不在了,而命令对象原创 2021-03-16 17:33:52 · 89 阅读 · 0 评论 -
C++设计模式-外观模式
外观模式-接口隔离定义:为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易(复用)。----《设计模式》GOF类图:使用场景:当组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的烟花,这种过多的耦合面临很多变化的挑战。解决问题:简化外部客户程序和系统间的交互接口;将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦。#define _CRT_SECURE_NO_WARNINGS #incl原创 2021-03-16 17:09:16 · 78 阅读 · 0 评论 -
C++设计模式-适配器模式
适配器模式-接口隔离定义:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能在一起动作的那些类可以一起工作。----《设计模式》GOF类图:应用场景:在软件系统中,由于应用环境的变化,常常需要将”一些现存的对象“放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。解决的问题:应对迁移的变化:既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口。代码示例:#include <iostream>using namespace s原创 2021-03-16 16:51:45 · 45 阅读 · 0 评论 -
C++设计模式-代理模式
代理模式-接口隔离定义:为其他对象提供一种代理控制(隔离,使用接口)对这个对象的访问。----《设计模式》GOF类图:使用场景:在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。解决的问题:在不是去透明操作对象的同时来管理/控制这些对象特有的复杂性;增加一层间接层。代码示例:#include <iostream>#include <string>原创 2021-03-16 16:12:59 · 65 阅读 · 0 评论 -
C++设计模式-单例模式
单例模式-对象性能模式定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点----《设计模式》GOF类图:应用场景:在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑争取行,以及良好的效率。解决的问题:绕过常规的构造器,提供一种机制来保证一个类只有一个实例。代码:单例模式中有的人将其又进行划分,分为“懒汉式”、“饿汉式”;下面分别展示这两种单例模式的代码示例:#include<iostream>using namespace原创 2021-03-16 15:11:48 · 57 阅读 · 0 评论 -
C++设计模式-抽象工厂模式
抽象工厂模式-对象创建模式引言:为了解决工厂模式可能带来的系统大量开销,我们可以进一步进行抽象,将一类对象创建放在一个工厂中。类图:类图各个部分介绍:抽象工厂(Abstract Factory)角色:它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。具体工厂(Concrete Factory)角色:它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。抽象产品(Abstract Product)角色:它为每种原创 2021-03-16 13:09:39 · 73 阅读 · 0 评论 -
C++设计模式-工厂模式
工厂模式-对象创建模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。----《设计模式》GOF类图:应用场景:软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。解决问题:应对这种变化。如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?代码:#include <iostream&原创 2021-03-16 12:58:43 · 96 阅读 · 0 评论 -
C++设计模式-桥接模式
桥接模式-单一职责定义:将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 ----《设计模式》GOF类图:适用场景:某些类型的固有实现逻辑,使得他们具有两个变化的维度,且两个变化的维度之间有相互依存关系,多个维度同样适用。解决问题:可以应对多维度的变化。利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度。代码:原始代码:class Messager{public: virtual void Login(strin原创 2021-03-16 11:50:04 · 91 阅读 · 0 评论 -
C++设计模式-装饰者模式
装饰模式-单一职责模式**定义:**动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。----《设计模式》GOF类图:应用场景:动态、透明的方式给单个对象添加职责。当不能采用继承的方式对系统进行扩展或者采用继承不利于系统扩展和维护时可以使用装饰模式。解决问题:可以通过动态的方式来扩展一个对象的功能。可以一个对象进行多次装饰避免“扩展功能的增多”带来的子类膨胀问题。代码模块:#原创 2021-03-16 11:30:17 · 105 阅读 · 0 评论 -
C++设计模式-Observer 观察者模式
Observer 观察者模式-组件协作模式**定义:**定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 ----《设计模式》GOF**应用场景:**在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。**解决的问题:**使用面向对象技术,可以将这种依赖关系弱化,并形成一种原创 2021-03-13 23:10:50 · 84 阅读 · 0 评论 -
C++设计模式-Strategy模式
Strategy模式-组件协作模式**定义:**定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。—《设计模式》GOF**应用场景:**在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。**解决的问题:**在运行时根据需要透明地更改对象的算法;将算法与对象本身解耦。类图:代码块:原始设计代码:enu原创 2021-03-13 22:45:42 · 139 阅读 · 0 评论 -
C++设计模式-Template Method
Template Method – 组件协作**定义:**定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。----《设计模式》GOF**应用场景:**对于那些有稳定的整体操作结构,子步骤会因需求的改变而会有很多改变,或者由于固有的原因而无法和任务的整体结构同时实现。类图:代码举例:原始设计代码://应用程序开发人员class Applicati原创 2021-03-13 22:28:50 · 112 阅读 · 0 评论 -
C++设计模式
C++设计模式-开篇前言面向对象设计模式是”好的面向对象设计“,就是可以指那些可以满足”应对变化提高复用“的设计;设计模式就是在需求的频繁变化中寻找变化点,在变化点处应用设计模式,从而可以更好地应对需求变化,我们要知道在什么时候以及什么地点使用设计模式。设计模式不宜先入为主,就是说不能一上来就应用设计模式,我们需要先掌握”Refactoring to Patterns“,就是重构获得模式。重构的关键技法:静态 ----------> 动态早绑定原创 2021-03-13 22:16:48 · 98 阅读 · 0 评论