![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
skynetkang
学习旅程,脚踏实地,一路向前。
展开
-
设计模式——命令模式(C++11实现)
命令模式将请求封装为一个对象,将请求的发起者和执行者解耦,支持对请对排队、撤销和重做。随着请求的增对,请求的封装类也会越来越多,会导致类爆炸。C++11 在通用的命令类的内部定义了一个通用的函数包装器,可以接受所有的可调用对象,这个命令类泛化了所有的命令。使得可以封装所有的命令,增加新的请求时无需重新定义命令了,解决了类爆炸问题#include <iostream>#include <functional>#include <type_traits>#原创 2021-02-20 10:59:50 · 301 阅读 · 1 评论 -
设计模式——访问者模式(C++11实现)
访问者Visitor模式:一个作用于某对象结构中的各元素的操作,可用于在不改变各元素的前提下定义作用于这些元素的新操作。C++11通过可变参数模板,实现一个稳定的接口层,利用可变参数模板的特点,可以让访问者接口层访问任意个数的访问者,不需要每增加一个新的访问者就修改接口层。#include <iostream>#include <functional>#include <string>using namespace std;template<t原创 2021-02-20 10:32:54 · 264 阅读 · 0 评论 -
设计模式——观察者模式(C++11实现)
观察者模式定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。C++11实现的观察者模式,内部维护了一个泛型函数列表,观察者只需要将观察者函数注册进来即可,消除了继承导致的强耦合,通知接口使用了可变参数模板,支持任意参数,消除了接口变化的影响。#include <iostream>#include <string>#include <functional>#include <map>us原创 2021-02-20 10:11:48 · 635 阅读 · 1 评论 -
设计模式——单例模式(C++11实现)
C++11实现泛型单例模式,支持任意参数类的对象创建。采用了C++11的可变参数模板和完美转发技术#include <iostream>#include <string>#include <stdexcept>using namespace std;//单例类,包含任意参数的类实例。template <typename T>class Singleton{public: template <typename... Arg原创 2021-02-18 10:52:47 · 747 阅读 · 0 评论 -
设计模式——组合模式(C++实现)
组合模式 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。适用场景 1、你想表示对象的部分 -整体层次结构。 2、你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。采用菜鸟教程的例子,这里用C++实现#include<iostream>#...原创 2019-06-29 15:37:17 · 190 阅读 · 0 评论 -
设计模式——访问者模式(C++实现)
访问者模式 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。属于行为型模式适用场景 1、一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。 2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作...原创 2019-06-29 15:08:44 · 165 阅读 · 0 评论 -
设计模式——模板模式(C++实现)
模板模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。适用场景 1、 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 2、各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。 3、 控制子类扩展。模板方...原创 2019-06-29 14:56:18 · 259 阅读 · 0 评论 -
设计模式——抽象工厂模式(C++实现)
抽象工厂模式 提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用场景 1、一个系统要独立于它的产品的创建、组合和表示时。 2、 一个系统要由多个产品系列中的一个来配置时。 3、当你要强调一系列相关的产品对象的设计以便进行联合使用时。 4、当你提供一个...原创 2019-06-29 14:39:39 · 260 阅读 · 0 评论 -
设计模式——策略模式(C++实现)
策略模式 定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。属于行为型模式。适用场景 1、许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 2、需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间 /时间权衡的算法。当这些变...原创 2019-06-29 14:02:18 · 475 阅读 · 0 评论 -
设计模式——桥接模式(C++实现)
桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立的变化。属于结构型模式。通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。适用场景 1、你不希望在抽象和它的实现部分之间有一个固定的绑定关系。 例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。 2、类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时 ...原创 2019-06-29 15:55:09 · 232 阅读 · 0 评论 -
设计模式——原型模式(C++实现)
原型模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。属于创建型模式,它提供了一种创建对象的最佳方式。适用场景 当一个系统应该独立于它的产品创建、构成和表示时,要使用 Prototype模式;以及当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者为了避免创建一个与产品类层次平行的工厂类层次时;或者当一个类的实例只...原创 2019-06-29 16:10:42 · 157 阅读 · 0 评论 -
设计模式——空对象模式(C++实现)
空对象模式 空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。适用场景 需要在无法创建具体实例或数据不可用的时候提供默认行为,则需要用空对象模式,而不是仅仅返回一个NULL值。采用菜鸟教程的例子,这里用C++实现#include&l...原创 2019-06-29 16:19:09 · 1484 阅读 · 0 评论 -
设计模式——单例模式(C++实现)
单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。适用场景 1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。这里用C++实现了单例模式的懒汉模式和饿汉模式#include<iostream>...原创 2019-06-29 16:30:36 · 170 阅读 · 0 评论 -
设计模式——过滤器模式(C++实现)
过滤器模式 允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。属于结构型模式,它结合多个标准来获得单一标准。适用场景 需要在一个集合中按照一定的条件和规则筛选出子集合,可以用过滤器模式。采用菜鸟教程的例子,这里用C++实现#include<iostream>#include<s...原创 2019-06-30 00:41:03 · 1712 阅读 · 3 评论 -
设计模式——工厂模式(C++实现)
工厂模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。适用场景 1、当一个类不知道它所必须创建的对象的类的时候。 2、当一个类希望由它的子类来指定它所创建的对象的时候。 3、 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。...原创 2019-06-30 14:48:18 · 178 阅读 · 0 评论 -
设计模式——备忘录模式(C++实现)
备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后接可将该对象恢复到原先保存的状态。适用场景 1、必须保存一个对象在某一个时刻的 (部分)状态, 这样以后需要时它才能恢复到先前的状态。 2、如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。 ...原创 2019-06-30 15:27:20 · 308 阅读 · 0 评论 -
设计模式——中介者模式(C++实现)
中介者模式 用一个 中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,可以独立地改变它们之间的交互。适用场景 1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 2、 一个对象引用其他很多对象并且直接与这些对象通信 ,导致难以复用该对象。 ...原创 2019-06-30 15:42:11 · 340 阅读 · 0 评论 -
设计模式——服务定位器模式(C++实现)
服务定位器模式 服务定位器模式充分利用了缓存技术。在首次请求某个服务时,服务定位器在 JNDI 中查找服务,并缓存该服务对象。当再次请求相同的服务时,服务定位器会在它的缓存中查找,这样可以在很大程度上提高应用程序的性能。以下是这种设计模式的实体。 1、服务(Service)- 实际处理请求的服务。对这种服务的引用可以在 JNDI 服务器中查找到...原创 2019-06-26 22:38:26 · 239 阅读 · 0 评论 -
设计模式——前端控制器模式(C++实现)
前端控制器模式 前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。前端控制器设计模式的实体。 1、前端控制器(Front Controller)- 处理应用程序所有类型请求的单个...原创 2019-06-26 22:00:33 · 799 阅读 · 0 评论 -
设计模式——装饰器模式(C++实现)
装饰器模式简介: 在不改变现有类的基础上添加新的功能,属于结构型设计模式,作为现有类的一个包装。 适用场景 在不影响其他对象的情况下,以动态的、透明的方式扩展单个对象的职责。 处理那些可以撤销的职责 当不能采用生成子类的方法进行扩充时,可以使用装饰器设计模式采用菜鸟教程的例子,这里用C++实现#include<iostream>...原创 2019-06-20 22:35:46 · 896 阅读 · 0 评论 -
设计模式——代理模式(C++实现)
代理模式简介: 让一个类代理另一个类去执行另一类的功能,属于结构型设计模式。 适用场景:远程代理,为一个对象在不同的地址空间提供局部代表。 虚代理,在创建开销很大的对象的时候。可以让代理对象根据需要在不同的时机创建原始对象。避免同时创建,提高响应速度。 保护代理,控制对原始对象的访问。 智能指引,在访问原始对象时可以执行一些附加操作,以丰富原始对象的功...原创 2019-06-20 22:46:39 · 214 阅读 · 0 评论 -
设计模式——建造者模式(C++实现)
1、建造者模式简介 使用多个简单的对象 一步步构建一个复杂的对象,将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。属于创建型模式。 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时,或者当构造过程必须允许被构造的对象有不同的表示时,可以使用建造者模式构造对象。借鉴菜鸟教程里面的建造者模式的例子,这里用C++实现:#include<...原创 2019-06-16 23:25:10 · 936 阅读 · 0 评论 -
设计模式——适配器模式(C++实现)
适配器模式简介作为两个不兼容接口之间的桥梁,结合了两个独立接口的功能,处于结构型模式 在下列三种情景下可以使用适配器模式: 使用一个已存在的类,但其接口不符合要求 创建一个复用的类,该类可以与其他不相关的类或不可预见的类协同工作 使用一个已存在的子类,但不能对每一都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口。 采用菜鸟教程适配器模式的例子,这里用C++实...原创 2019-06-16 23:43:17 · 254 阅读 · 1 评论 -
设计模式——享元模式(C++实现)
享元模式简介 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。属于结构型模式。适用场景:1、一个应用程序使用了大量的对象。2、完全由于使用大量的对象,造成很大的存储开销。3、对象的大多数状态都可变为外部状态。4、如果删除对象的外部状...原创 2019-06-25 21:28:22 · 191 阅读 · 0 评论 -
设计模式——组合实体模式(C++实现)
组合实体模式简介 组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。组合实体(Composite Entity)- 它是主要的实体...原创 2019-06-25 21:49:52 · 517 阅读 · 0 评论 -
设计模式——命令模式(C++实现)
命令模式简介 命令模式 将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。行为型模式。适用场景 1、在面向对象中使用回调机制,可以使用命令模式,它是回调机制在面向对象中的一个替代品。 2、在不同的时刻指定、排列以及执行请求。...原创 2019-06-22 21:58:51 · 249 阅读 · 0 评论 -
设计模式——责任链模式(C++实现)
责任链模式简介 将请求的发送者和接收者进行解耦。为请求创建了一个接收者对象的链,并沿着这条链传递该请求,直到有一个对象处理它为止。属于行为型模式。适用场景: 1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求 ...原创 2019-06-23 16:59:35 · 228 阅读 · 0 评论 -
设计模式——状态模式(C++实现)
状态模式简介 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。属于行为型模式。适用场景: 1、一个对象的行为取决于它的状态时,并且必须在运行时刻根据状态改变它的行为 2、一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。Sate模式将每一...原创 2019-06-23 18:05:16 · 376 阅读 · 0 评论 -
设计模式——观察者模式(C++实现)
观察者模式 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。适用场景: 1、一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中,使它们可以各自独立地改变和复用。 2、一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对...原创 2019-06-26 20:26:14 · 276 阅读 · 0 评论 -
设计模式——数据访问对象模式(C++实现)
数据访问对象模式 数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。参与者 1、数据访问对象接口(Data Access Object Interface)- 该接口定义了在一个模型对象上要执行的标准操作。 2、数据访...原创 2019-06-26 20:37:51 · 499 阅读 · 0 评论 -
设计模式——MVC模式(C++实现)
MVC模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 1、Model(模型)- 模型代表一个存取数据的对象。它带有逻辑,在数据变化时更新控制器。 2、View(视图)- 视图代表模型包含的数据的可视化。 3、Contr...原创 2019-06-26 20:45:16 · 4670 阅读 · 1 评论 -
设计模式——外观模式(C++实现)
外观模式 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。属于结构型模式。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。适用场景: 1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子...原创 2019-06-26 21:03:03 · 570 阅读 · 0 评论 -
设计模式——业务代表模式(C++实现)
业务代表模式简介 业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。用来减少通信或对表示层代码中的业务层代码的远程查询功能。业务层里的实体 1、客户端(Client)- 表示层。 2、业务代表(Business Delegate)- 一个为客户端实体提供的入口类,它...原创 2019-06-26 21:18:53 · 533 阅读 · 0 评论 -
设计模式——拦截过滤器模式(C++实现)
拦截过滤器模式 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。拦截过滤器设计模式的实体 1、过滤器(Filter)- 过滤器在请求处理程序执行请...原创 2019-06-26 21:32:14 · 1706 阅读 · 0 评论 -
设计模式——解释器模式(C++实现)
解释器模式简介 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,属于行为型模式。 这种模式实现了一个表达式接口,该接口解释一个特定的上下文。常被用在 SQL 解析、符号处理引擎等。适用场景 1、当有一个语言需要解释执行 , 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解...原创 2019-06-26 21:46:17 · 557 阅读 · 0 评论 -
设计模式——建造者模式——Python实现
建造者模式: 使用多个简单对象通过固定步骤构建一个复杂对象。 属于创建型模式 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 与工厂模式的区别是;建造者模式更加关注零件的装配顺序。一些基本部件不变,而其组合经常发生变化 例子1: 组装自行车Py...原创 2019-02-24 17:28:46 · 294 阅读 · 0 评论