
设计模式(C++)
文章平均质量分 64
秋刀鱼之味
这个作者很懒,什么都没留下…
展开
-
单例模式
基本概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。在代码上表现为整个程序中只调用一次该类的构造函数。 GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。 使用场景 在应用系统开发中,我们常常有以下需求: 在多个线程之间,比如初始化一次转载 2017-06-23 11:34:11 · 224 阅读 · 0 评论 -
模板模式
Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法(模板方法)中的某些必要的处理委让给抽象方法(模板类父类中的纯虚函数),通过子类对抽象方法的不同实现,改变整个算法的行为。 也就是说,通过子类重写父类虚函数,在保证总体大局,总体步骤不变的情况下,每一个小步骤的具体算法行为可以改变,最终实现接口不变。 角色和职责 案例#include <iostr原创 2017-08-21 19:21:16 · 246 阅读 · 0 评论 -
命令模式
Command模式也叫命令模式 ,是行为型设计模式的一种。Command类封装了对目标对象的调用行为以及调用参数。 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。 但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。 整个调用过程比较繁杂,或者存在多处这原创 2017-08-21 19:30:49 · 225 阅读 · 0 评论 -
责任链模式与策略模式
责任链模式Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。 例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完原创 2017-08-21 19:43:25 · 11536 阅读 · 0 评论 -
中介者模式与观察者模式
中介者模式Mediator(中介者)模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。 角色和职责 Mediator抽象中介者原创 2017-08-21 19:57:20 · 4742 阅读 · 0 评论 -
备忘录模式与访问者模式
备忘录模式Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象(原生对象)的内部状态到备忘录,并在需要的时候通过caretaker(保存了备忘录)提取备忘录的内容(undo/rollback)恢复原生对象以前的状态。 角色及职责 Originator(原生者) 需要被保存状态以便恢复的那个对象。 Memento(备忘录) 该对象由Originator创建,主要用原创 2017-08-21 20:14:30 · 341 阅读 · 0 评论 -
解释器模式与状态模式
解释器模式解释器模式是行为型模式之一,描述了如何为简单的语言定义一套语法,如何在该语言中表示一个句子,以及如何解释这些句子,然后执行相应的动作和行为! 角色及职责 Context 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。 AbstractExpression 解释器抽象类。 ConcreteExpression 解释器具体实现类。 案例#inc原创 2017-08-21 20:26:29 · 272 阅读 · 0 评论 -
迭代器模式
iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。 由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法 –弊端是容器类承担了太多功原创 2017-08-21 20:30:02 · 308 阅读 · 0 评论 -
设计模式概括
创建型模式 单例模式Singleton 工厂模式Factory 抽象工厂模式AbstractFactory 创建者模式Builder 原型模式Prototype 结构性模式 代理模式Proxy 装饰模式Decorator 适配器模式Adapter 组合模式Composite 桥接模式Bridge 外观模式Facade 享元模式Flyweight 行为型模式 模板模式T原创 2017-08-21 20:42:41 · 296 阅读 · 0 评论 -
享元模式
Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。说白了,就是共享内存,共享对象! 角色和职责 抽象享元角色: 所有具体享元类的父类,规定一些需要实现的公共接口。 具体享元角色: 抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。 享元工厂角色: 负责创建和管理享元角色。 使用场景: 是以共享的方式,高效的支持大量原创 2017-08-21 19:18:39 · 214 阅读 · 0 评论 -
外观模式
Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。 角色和职责 Façade 为调用方, 定义简单的调用接口。 Clients(没有画出) 调用者。通过Facade接口调用提供某功能的内部类群。 Subsystem 功能提供原创 2017-08-21 19:09:46 · 184 阅读 · 0 评论 -
桥接模式
Bridge 模式又叫做桥接模式,是结构型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。 一般用来解决多对多的问题!两个集合中的元素可以自由组合,每个集合分别代表抽象和实现!原创 2017-08-20 10:39:57 · 211 阅读 · 0 评论 -
工厂模式
简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 有一个工厂类,专门生产别的类的实例,这些能被他生产的类具有相同的父类! 核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。 注意:简单工厂模式不属于23种设计模式之一 角色及职责 工厂(Creato原创 2017-08-20 09:37:21 · 227 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。 对于工厂模式:要么生产香蕉、要么生产苹果、要么生产西红柿;但是不能同时生产多个产品。 抽象工厂:能同时生产一个产品族(多个产品)。===》抽象工厂存在原因 重要区别: 工厂模式只能生产一个产品。(要么香蕉、要么苹果)原创 2017-08-20 09:46:24 · 228 阅读 · 0 评论 -
创建者模式
建造者模式也叫生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:关注对象各部分的创建过程:不同的工厂(这里指builder(创建者)/生成器)对产品属性原创 2017-08-20 09:54:24 · 455 阅读 · 0 评论 -
原型模式
Prototype(原型)模式是一种对象创建型模式,它采取复制原型对象的方法来创建新的对象实例。使用Prototype模式创建的实例,具有与原型一样的数据。 1. 由原型对象(旧对象)自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。 2. 目标对象是原型对象的一个克隆。 3. 根据对象克隆深度层次的不同,有浅度克隆与深度克隆。 角色及职责 原型模式主要面对的问题原创 2017-08-20 10:04:58 · 195 阅读 · 0 评论 -
代理模式
代理模式,是结构型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。 所谓代理,是指具有与代理元(被代理的对象)具有相同接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。 角色及职责 subject(抽象主题角色): 真实主题与代理主题的共同接口。 RealSubject(真实主题角色原创 2017-08-20 10:11:38 · 220 阅读 · 0 评论 -
装饰模式
装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 角色及职责 component 抽象产品类。是所有具体产品和装饰者的基类,客户端就是面向抽象产品类进行编程,他原创 2017-08-20 10:18:25 · 239 阅读 · 0 评论 -
适配器模式
是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。 角色和职责 Target: 目标类,也就是客户端希望使用的类,里面有希望得到的接口–对应案例中的18V。 Adapter 适配器,将实际接口转换为希望使用的接口,适配器继承自目标类。–对应案例中的Adapter。 Adaptee 待适配的类,实际提供的类,通过适配器的功能,客户端可以使用其提供的实际类原创 2017-08-20 10:25:43 · 184 阅读 · 0 评论 -
组合模式
组合模式,是(构造型)结构型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。 角色及职责 Component (树形结构的节点抽象) 为所有的对象定义统一的接口(公共属性,行为等的定义) 提供管理子节点对象的接口 [可选]提供管理父节点对象的接口 Leaf (树形结构的叶节点) Component的实现子类–普通文件 Composite(树原创 2017-08-20 10:33:03 · 230 阅读 · 0 评论 -
STL各容器适用情况
一、各容器特性 vector 典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间复杂度,在序列尾部进行插入、删除是常数时间复杂度,但在序列的头部插入、删除的时间复杂度是O(n),可以 在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。 deque 序列容器,内存也是连续的,和vector相似,区别在于在转载 2016-11-14 22:30:39 · 679 阅读 · 0 评论