![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和设计模式
yun6853992
走在不知道到知道,知道到懂得,懂得到做到,做到到试图分享的路上。
感激每一个对我提出问题的人,感谢每一个善意鼓励我的人。
展开
-
结构型 组合模式
组合模式(Composite Pattern):将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式:逻辑分析:组合模式包含以下主要角色。抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成。树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于原创 2021-07-28 09:10:07 · 64 阅读 · 0 评论 -
结构型 装饰器模式
装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。如:将一个形状装饰上不同的颜色,同时又不改变形状。(增强原对象功能)装饰器模式:被装饰的对象作为抽象基类,我们用子类实现对该对象增加额外的功能。定义一个基础类,使用子类一直扩展功能。源码demo:/*************************************************************************************************************原创 2021-07-28 09:09:33 · 54 阅读 · 0 评论 -
结构型 享元模式共享工厂
享元模式(Flyweight Pattern):用于减少创建对象的数量,以减少内存占用和提高性能。尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 如数据库里的数据池。享元模式: 重复使用的细粒度的对象的构建和释放,直接一次构造重复使用。使用场景: 如棋盘游戏,黑白棋子的管理源码Demo:参考:C++设计模式——享元模式 - Ring_1992 - 博客园 (cnblogs.com)/**********************************************原创 2021-07-28 09:09:05 · 65 阅读 · 0 评论 -
结构型 外观模式
外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 (把某些接口统一在一起,用一个接口调)外观模式:逻辑分析:如一个大的系统,由不同的子模块构成,用一个类统一管理这些子模块的流程管理。使用场景:1:在设计大的系统时,有意识的划分模块,例如MVC模型2:在实现一些列复杂调用时,可以对流程进行调整划分,分别实现。源码demo:参考:参考 https://www.cnblogs.com/ring1992原创 2021-07-28 09:08:18 · 64 阅读 · 0 评论 -
结构型 适配器模式
适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口,两个不兼容的接口之间的桥梁。(改变目标对象的接口了)适配器模式 增加一个中间接口,对目标接口和使用接口做一定的适配。 例如:18V的接口,通过适配器实际调成220V使用场景: 一般使用在遗留代码的系统中。 适配遗留代码和现在代码。参考:C++实现设计模式——适配器(Adapter)模式_yxh_1_的博客-CSDN博客_c++ 适配器代码demo:如:把220v的电压适配到不同的电压去使用:原创 2021-07-28 09:07:39 · 53 阅读 · 0 评论 -
结构型 桥接模式
桥接模式/接口模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立的变化。 提供桥接的接口,使两者可以独立变化却互不影响(可以与继承配合,实现各种不同的组合)桥接模式适用场景: 跨平台应用、 支持多种类型的数据库服务器,与多个特定种类 (例如云平台和社交网络等) 的 API 供应商协作时。 硬件与软件操作系统的适配源码Demo: 如:要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,我们可以设计根原创 2021-07-28 09:07:13 · 54 阅读 · 0 评论 -
结构型 代理模式
代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 (不能改变对象接口)代理模式在不修改客户代码的前提下,对已有的类的对象上增加行为时使用。使用场景:远程代理:为一个对象的地址空间提供局部代表。 ==》通过代理,实际是做远程通信虚拟代理:根据需要来创建开销较大的对象。 ==》对开销大的对象做封装,真正使用时做整整委托调用保护代理:用于对象应该具有不同访问权限的场景,控制对原始对象的访问。智能指引:取代简单的指针,它在访问对象时执行一些附加操作。--原创 2021-07-27 09:01:36 · 95 阅读 · 0 评论 -
行为型 状态模式
状态模式(State Pattern):创建表示各种状态的对象和一个行为随着状态对象改变而改变的context对象。状态模式:概要分析: 将基于switch语句的大型状态该机转换为对象。 用不同的对象,不同的状态标志,实现不同的模块处理源码Demo:/*************************************************************************************************状态模式: 大白话就是,状态的改变依赖于内部变原创 2021-07-27 09:00:25 · 93 阅读 · 0 评论 -
行为型 中介者模式
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式概要分析两个类之间不能直接联系,而是通过第三方之间通信,从而将两个类之间的关系解耦例如:将具体的两个同事之间的消息进行转发,从而使得两个同事之间避免了直接联系样例demo:如:租房中介:实现了房东和租户之间消息互通。/************************************************原创 2021-07-27 08:59:50 · 89 阅读 · 0 评论 -
行为型 责任链模式(过滤器模式)
责任链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。责任链模式概要分析: 一个请求,需要经过一些列的对象进行操作时使用。 在实现时,要注意指定好下一个执行者,直到最终所有执行完才算结束。如:请假条需要组长,部门领导,公司领导依次审批才有效。注意:过滤器与责任链实现类似,只是在链上找到有一个处理就处理,否则就处理失败。源码Demo:/原创 2021-07-27 08:59:19 · 246 阅读 · 0 评论 -
行为型 模板模式
模板模式(Template Pattern):一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。模板模式概要分析 把不变的接口提取到父类中,去除子类中的重复代码,子类只需要按照基类提供的接口做统一的处理。使用场景 需要一系列的步骤或者过程实现业务,但是具体的每个步骤或者过程有一定的差异,例如我们的建造者模型中房屋的构造,需要对走廊,门,房间各个模块细节设计,就可以对流程做简单划分,给出接口,子类只需要按照模板接口实现具体细节执行,原创 2021-07-27 08:58:47 · 56 阅读 · 0 评论 -
行为型 命令模式
命令模式(Command Pattern):种数据驱动的设计模式。请求以命令的形式包裹在对象中,将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。命令模式概要分析: 实现了发送者和接收者的完全解耦, 1:可以定义一个命令基类,统一接口,供不同的子类处理不同的命令,以及提供统一接口调用。 2:可以定义一个命令的管理类,根据不同的输入内容,构造不同的具体类,调用执行单个命令。 也可以管理一系列的命令,统一一次执行。定义命令类,存储命令,定义命令的行为==》基类的方式,原创 2021-07-27 08:57:48 · 96 阅读 · 0 评论 -
行为型 解释器模式
解释器模式(Interpreter Pattern):给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 (用在SQL解析、符号处理引擎等)解释器模式: 对输入的内容,构建语法树,按照特定的规则进行解析。概要分析: 就是对输入的字符进行语法,词法分析,比如数学运算的计算等使用场景: 比如:处理器,硬盘控制器,浏览器等对输入的信息做不同的解析。 比如:使用指令,控制一套机器人系统样例Demo:参考来源:设计模式C++实现(20)——解释器模式_原创 2021-07-27 08:57:04 · 47 阅读 · 0 评论 -
行为型 观察者模式(发布订阅)
观察者模式(Observer Pattern):当对象间存在一对多关系时,则使用观察者模式(ObserverPattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式概要分析: 观察者模式,感觉就类似发布订阅的功能。观察者的目标: 定义一个目标主题类,提供一个接口可以注册观察者的对象,内部管理多个。(其实也就是一个观察者的管理中心)观察者: 定义一个基础类,可以衍生多个观察者,方便作为目标主题类接口参数。发布者:集管理观察者的功能,有新消息时,可以主动通知。 也原创 2021-07-27 08:55:40 · 82 阅读 · 0 评论 -
行为型 访问者模式
访问者模式(Visitor Pattern):主要将数据结构与数据操作分离。 使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 (稳定的数据结构和易变的操作耦合问题。)访问者模式逻辑分析: 作为访问者,各种各样对象是不同的,可以用相同的基础类继承的方式设计。 ==》实现数据操作 作为目标访问对象,应该有不同的业务不同的场景,可以根据继承/传入入参类型的方式设计。原创 2021-07-27 08:55:07 · 78 阅读 · 0 评论 -
行为型 迭代器模式
迭代器的作用:遍历某一类相同元素的集合。迭代器模式属于 行为型设计模式。迭代器的思路: 在不改变底层元素的前提下,按照某种方式遍历集合中元素的值。迭代器的实现: 1:前提: 需要一个集合元素类,一个集合类,需要一个迭代器类 2:迭代器中可以获取到集合类的对象,对该对象进行接口封装。 3:如何扩展迭代器模型: 可以用模板模型进行扩展参考https://www.cnblogs.com/bugxch/ 的相关源码实现,对迭代器模式进行理解:1: 《图解设计模式》中遍历书架中的书本为原创 2021-07-27 08:54:31 · 76 阅读 · 0 评论 -
行为型 策略模式
策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。(一组相同功能的不同策略,用其中一个就好) 创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。 策略对象改变context对象的执行算法。如:旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。策略模式:逻辑分析: 多种方案,多种组合方案中选择一种的场景时。使用场景: 打折策略的选择,多种打折方案只能用一种 算法实现/加密方式策略原创 2021-07-26 14:43:29 · 73 阅读 · 0 评论 -
行为型 备忘录模式
备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。备忘录模式:逻辑分析: 定义一个中间类,保存使用类对象的中间状态,有利于下次的恢复。 参考网址:C++设计模式——备忘录模式_CoderAldrich的专栏-CSDN博客_c++备忘录模式为了状态的安全,使用c++的友元类特性,只有特定的类才可以进行数据的读取。使用场景: 如编辑文档时,撤销功能; 如命令模式中,撤销命令的逻辑功能 如游戏场景中,游戏角色的相关原创 2021-07-26 14:42:55 · 65 阅读 · 0 评论 -
创建型 原型模式
原型模式(Prototype Pattern): 创建重复的对象,同时又能保证性能,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。原型模型用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象分析实现:通过对象的拷贝,构造相同类型的对象。例如:试卷的复印给类提供一个接口,实现对象的复制,这里注意类内成员的深拷原创 2021-07-26 14:41:17 · 71 阅读 · 0 评论 -
创建型 建造者模式
建造者模式(Builder Pattern): 多个简单的对象一步一步构建成一个复杂的对象。 如:肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的“套餐”;建造者模式 提供一种封装,管理各个子对象的创建。逻辑分析: 目标是同一个产品,可以由不同模块组装而成。 ==》所以需要定义一个产品类,以及组装模块提供函数。 不同的模块需要不同的组装构造,就是我们的构建者。(控制产品类不同的构造) ==》需要提供基础类,操作一个产品对象,提供方法对原创 2021-07-26 14:39:50 · 61 阅读 · 0 评论 -
创建型 单例模式
单例模式(Singleton Pattern): 保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式1:什么是单例我的理解:在程序运行期间,只构造一个实例,所有的使用都共享使用该实例。单例模式(Singleton Pattern): 保证一个类仅有一个实例,并提供一个访问它的全局访问点。2:如何实现单例单例的特性: 1:全局唯一的对象 ==》用static成员变量或者作用域特性实现 2:不允许用户去构造 ==》禁用构造函数,但是要保证自己能调用 3:只提供相应的接原创 2021-07-26 14:39:19 · 58 阅读 · 0 评论 -
创建型 简单工厂(工厂方法)模式
工厂模式 :定义一个用于创建对象的接口,让子类决定实例化哪一个类。 属于创建型模式。工厂模式(Factory Pattern): 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。简单工厂模式的实现:1:逻辑分析: 1:产品的创建交给一个单独的类来管理 2:此类提供全局的访问接口,根据输入条件的不同来创建不同的对象2:使用分析 1:创建工厂,根据输入的条件来创建对应的产品 2:在创建产品时,返回产品的接口指针 3:通过此指针原创 2021-07-26 14:38:25 · 64 阅读 · 0 评论 -
创建型 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern): 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。抽象工厂模式逻辑分析: 简单工厂创建一类产品的方法,抽象工厂类似多个简单工厂的叠加。 抽象工厂创建一系列相关的对象,让子类去搭配组合。使用场景: 工厂模式,适用于产品种类单一场合,为一类产品提供创建接口。 抽象工厂:使用于产品种类结构多,为一组产品提供创建接口。 如:电视的A,B型号和遥控的A,b型号可以互相搭配,就可以用抽象工厂。源码Demo:原创 2021-07-26 14:37:35 · 43 阅读 · 0 评论 -
自己理解设计模式,梳理一下
有关设计模式,偶然间发现:https://refactoringguru.cn/design-patterns/cpp创建型设计模式:单例模式: 利用static特性,在栈上,堆上申请单例对象,注意线程安全以及资源释放。简单工厂模式: 工厂方法:通过函数入参决定生产哪种产品(构造子类对象)。 简单工厂:工厂类由继承基类的方法,具体产品的实例化交给子类, ==》生产单一种类的产品抽象工厂模式: 如果要生产搭配组合型产品,如电视型号+遥控型号的组合,可以创建超级工厂定义基类。原创 2021-07-26 14:35:50 · 123 阅读 · 0 评论 -
设计模式概括认知
网络真的很强大,重新回头看这些东西,发现不再那么晦涩难懂,这里做简单整理。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 工厂模式(Factory Pattern): 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 抽象工厂模式(Abstract Factory Pattern): 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。 单例模式(Singleton Patt原创 2021-07-26 14:30:08 · 61 阅读 · 0 评论 -
通过c字符串对拷贝构造和赋值构造进行了解
通过cstring的处理进行熟悉知识点:在进行赋值构造和复制构造时,主要涉及到对象的深拷贝和浅拷贝。计算机默认是进行浅拷贝(有关构造函数中执行申请内存相关的变量,浅拷贝会拷贝地址而不是真正申请内存,会导致析构释放不匹配),涉及到相关的内存问题时,我们要注意自己对内存做处理,实现一些内存的申请和拷贝。也可以使用delete关键字或者类的private特性禁用拷贝构造和赋值构造。#include <stdio.h>#include <stdlib.h>#include <原创 2021-06-29 12:36:44 · 117 阅读 · 0 评论 -
C++单例模式
单例模式1:什么是单例我的理解:在程序运行期间,只构造一个实例,所有的使用都共享使用该实例2:如何实现单例单例的特性: 1:全局唯一的对象 ==》用static成员变量或者作用域特性实现 2:不允许用户去构造 ==》禁用构造函数,但是要保证自己能调用 3:只提供相应的接口,不允许用户修改 ==》禁用相关的拷贝构造等 4:多线程要安全,资源的释放 ==》加锁,同一作用域static对象释放在程序运行结束时调用对应的析构函数利用static特性,实现单例模式. 1:静态成原创 2021-06-29 12:30:10 · 131 阅读 · 0 评论