C/C++设计模式
码之有道
公众号《码之有道》,一起聊游戏全栈开发!
展开
-
C/C++设计模式(二十一) 迭代器模式
概念迭代器模式(Iterator模式)是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。1、由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法2、让调用者自己实现遍历。直接暴露数据细节给外部。以上方法1与方法2都可以实现对遍历,这样有问题呢?1、容器类承担了太多功能:一方面需要提原创 2020-09-09 22:46:27 · 291 阅读 · 0 评论 -
C/C++设计模式(二十) 解释模式
概念一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统中进行的操作。解释模式(Interpreter 模式)的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。角色和职责Context解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。AbstractExpression解释器抽象类。ConcreteExpression解释器具体实现类。案例#in...原创 2020-09-09 22:38:36 · 427 阅读 · 0 评论 -
C/C++设计模式(十九) 状态模式
概念State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。■问题.每个人、事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下转移到下一个不同的状态(State)。 最简单的-一个生活中的例子就是:地铁入口处,如果你放入正确的地铁.原创 2020-09-09 21:54:36 · 178 阅读 · 0 评论 -
C/C++设计模式(十九) 访问者模式
概念访问者模式(Visitor模式)是行为模式之一,它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作角色和职责。角色和职责抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。具体访问者(ConcreteVisitor)角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。抽象节点(Element)角色:声明一个接受操作,接受一个访问者对象作为一个参量。具体节点(Concre原创 2020-09-09 21:50:30 · 294 阅读 · 0 评论 -
C/C++设计模式(十八) 备忘录模式
概念备忘录模式(Memento模式)是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。应用场景如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。1、一个类需要保存它的对象的状态(相当于Originator角色)2、设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色)3、需要的时候,Caretaker角色要求Originator返回一个Memento并加原创 2020-09-09 21:44:39 · 102 阅读 · 0 评论 -
C/C++设计模式(十七) 观察者模式
概念观察者模式(Observer模式)是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。角色和职责Subject(被观察者)被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。ConcreteSubject被观察者的具体实现。包含一些基本的属性原创 2020-09-08 23:25:01 · 220 阅读 · 0 评论 -
C/C++设计模式(十六) 中介者模式
概念中介者模式(Mediator模式)是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。角色和职责GOOD:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。Mediator抽象中介者:中介者类的抽象父类。concreteMe原创 2020-09-08 23:21:55 · 262 阅读 · 0 评论 -
C/C++设计模式(十五) 策略模式
概念策略模式(Strategy模式)是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。角色和职责这里的关键就是将算法的逻辑抽象接口(DoAction) 封装到一个类中(Context), 再通过委托的方式将具体的算法实现委托给具体的Strategy 类来实现(ConcreteStrategeA类)。Strategy:策略原创 2020-09-08 23:18:17 · 206 阅读 · 0 评论 -
C/C++设计模式(十四) 责任链模式
概念责任链模式(Chain of Responsibility(CoR)模式)也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分。例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处原创 2020-09-08 23:14:07 · 291 阅读 · 0 评论 -
C/C++设计模式(十三) 命令模式
概念命令模式(Command模式) ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。-调用前后需要对调用参数进原创 2020-09-08 23:10:53 · 383 阅读 · 0 评论 -
C/C++设计模式(十二) 模板模式
概念模板模式(Template Method模式),是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。应用场景Template Method模式一般应用在具有以下条件的应用中:1.具有统一的操作步骤或操作过程2.具有不同的操作细节3.存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同总结:在抽象类中统一操作步骤,并规定好接口;让子类实现接口。这样可以把各个具体的子类和操作步骤接耦合。角色和职责原创 2020-09-08 23:06:51 · 165 阅读 · 0 评论 -
C/C++设计模式(十一) 享元模式
概念Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一一个对 象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如-一个字母“a”在文档中出现了100000次,而实际上我们可以这一万个字母 “a”共享-一个对象,当然因为在不原创 2020-09-08 23:03:00 · 173 阅读 · 0 评论 -
C/C++设计模式(八) 外观模式
概念外观模式(Facade模式),是由GoF提出的23种设计模式中的一种。外观模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作外观。角色和职责Façade为调用方, 定义简单的调用接口。Clients调用者。通过Facade接口调用提供某功能的内部类群。Packages功能提供者。指提供功能的类群(模块或子系统)适用于:为子系统中统一一套接口,让子系统更加容易使用。案例#include <iost.原创 2020-09-08 22:58:01 · 171 阅读 · 0 评论 -
C/C++设计模式(九) 桥接模式
概念桥接模式(Bridge模式),是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。角色和职责ClientBridge模式的使用者Abstraction抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用Refined Abstraction原创 2020-09-08 22:54:34 · 328 阅读 · 0 评论 -
C/C++设计模式(八) 组合模式
概念组合模式(Composite模式),是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。角色和职责Component (树形结构的节点抽象)为所有的对象定义统一的接口(公共属性,行为等的定义)提供管理子节点对象的接口方法[可选]提供管理父节点对象的接口方法Leaf(树形结构的叶节点)Component的实现子类Composite(树形结构的枝节点)Component的实现子类适用于:单个对象和组合对象的使用具有一致性。将对象原创 2020-09-08 22:49:24 · 178 阅读 · 0 评论 -
C/C++设计模式(七) 适配器模式
概念 适配器模式,是构造型模式之一,通过适配器模式可以改变已有类(或外部类)的接口形式。角色和职责适用于:是将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。案例#include <iostream>using namespace std;class Current18v{public: void use18vCurrent() { cout << "使用18v的交流电" <<.原创 2020-09-07 23:39:33 · 199 阅读 · 0 评论 -
C/C++设计模式(六) 装饰模式
概念装饰( Decorator)模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。类图角色和职责适用于:装饰者模式(DecoratorPattern)动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。案例#include <iostream>usi.原创 2020-09-07 23:36:02 · 285 阅读 · 0 评论 -
C/C++设计模式(五) 代理模式
概念Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。类图角色和职责subject(抽象主题角色):真实主题与代理主题的共同接口。RealSubject(真实主题角色):定义了代理角色所代表的真实对象。Proxy(代理主题角色):含有对真实.原创 2020-09-07 23:30:15 · 201 阅读 · 0 评论 -
C/C++设计模式(四) 原型模式
概念原型模式(prototype)是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用原型模式创建的实例,具有与原型一样的数据。1)由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。2)目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。3)根据对象克隆深度层次的不同,有浅度克隆与深度克隆。角色和职责原型模式主要面对的问题是:某些结构复杂的对象”的创建工作;由于需原创 2020-09-07 23:23:07 · 164 阅读 · 0 评论 -
C/C++设计模式(三) 建造者模式
概念Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法。角色和职责1)原创 2020-09-07 23:18:27 · 209 阅读 · 0 评论 -
C/C++设计模式(二) 抽象工厂模式
概念抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。 产品族和产品等级结构备注:工厂模式:要么生产香蕉、要么生产苹果、要么生产西红柿;但是不能同时生产一个产品组。抽象工厂:能同时生产一个产品族。===》抽象工厂存在原因解释:具体工厂在开闭原则下,能生产香蕉/苹果/梨子; (产品等级结构)抽象工厂:在开闭原则下,能生产南方香蕉/苹果/梨子 (产品族)...原创 2020-09-07 23:09:04 · 187 阅读 · 0 评论 -
C/C++设计模式(二) 工厂模式
概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。2.3.2类图角色和职责抽象工厂(Creator)角色工厂方法模式的核心,任何工厂类都必须实现这个接口。具体工厂( Concrete Creator)角色具体...原创 2020-09-07 22:59:39 · 154 阅读 · 0 评论 -
C/C++设计模式(二) 简单工厂模式
简单工厂模式概述简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。模式中包含的角色及其职责1.工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。2.抽象(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。3.具体产品(Concrete Product)角色简单工厂模式所创建的具体实例对原创 2020-09-07 00:25:02 · 339 阅读 · 0 评论 -
C/C++设计模式(一) 单例模式
概念单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。为什么使用单例模式在应用系统开发中,我们常常有以下需求:在多个线程之间,比如初始化一次socket资源;比如servlet环境,共享同一个资源或者操作同一个对象 在整个程序空间使用全局变量,共享资源 大规模系统中,为了性能的考虑,需要...原创 2020-09-07 00:25:12 · 1194 阅读 · 1 评论 -
C/C++设计模式(零) 设计模式分类和基本原则
设计模式前言模式在一定环境中解决某一问题的方案,包括三个基本元素:问题,解决方案和环境。即在一定环境下,用固定套路解决问题。设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。“我眼中的设计模式”把简单的问题复杂化(标准..原创 2020-09-06 16:44:15 · 444 阅读 · 0 评论