C++设计模式
文章平均质量分 52
mybright_
这个作者很懒,什么都没留下…
展开
-
Composite(组合)模式
案例:如下目录结构, |libevent/ |—-compat/ |——–sys/ |————queue.h |—-epoll.c 这是一个树形结构,它适合用组合模式表达。组合模式是类构造型设计模式之一,通过递归方法来构造对象的结构,并可以通过一个对象来访问整个对象树。 组合模式UML图: component(树形结构的抽象节点):1)为所有的原创 2018-01-16 12:47:59 · 266 阅读 · 0 评论 -
Facade(外观)模式
外观模式是类结构型设计模式之一,描述的是一组具有类似功能的类群。 案例:输入系统中有多个输入子系统:键盘、触摸屏、鼠标等,它们都要为上层应用程序提供x、y坐标。 若用户代码直接操作这些输入子系统:class SubMouse{public: void get_mouse_location() { cout \tx = 240, y = 660" }};clas原创 2018-01-16 12:42:32 · 229 阅读 · 0 评论 -
adapter(适配器)模式
适配器模式是结构型设计模式之一,通过适配器模式可以改变已存在的类的接口形式。 案例:手机充电需要5V的直流电源,但是市电是220V交流电源。要想让手机能够正常充电,中间需要一个电源适配器,来将不能被手机直接使用的市电电源转为5V的直流电源。 针对上述案例,UML图如下: 适配器适用于将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容不能参与工作的类可以一起工原创 2018-01-06 17:39:04 · 322 阅读 · 0 评论 -
Decorator(装饰者)模式
装饰模式就是将添加的附加功能分别放在单独的类中,并在这个类中包含它要装饰的对象,当需要增加附加功能时,用户代码可以有选择地、按顺序的使用装饰功能包装对象。 继承关系也可以添加附加功能,但是不提倡。显然装饰模式是对继承关系的一个替代方案。综上,装饰者模式适用于动态的给一个对象添加一些额外的功能,就增加功能来说,装饰者模式比生成子类更灵活。 案例:以手表为例,基本功能是显示时间,附加功能原创 2018-01-05 18:10:37 · 323 阅读 · 0 评论 -
Proxy(代理)模式
代理模式是结构型的设计模式之一(所谓结构型设计模式指的是类和类之间组合形成更大的结构),它可以为其它被代理对象提供一种代理以控制对被代理对象的访问。代理对象和被代理的对象具有相同的接口(它们继承自同一个抽象类),用户代码通过代理对象来与被代理的目标交互,代理对象一般会在交互过程中可以进行某些属于代理对象的操作。 案例: 针对卖衣服这种商业买卖,可以在实体店销售,也可以授权于网上商店,也就是原创 2018-01-05 12:53:12 · 488 阅读 · 0 评论 -
C++单例模式(懒汉/饿汉)
单例模式是什么?简单来讲,就是在软件系统中,一个类只允许有一个实例,即只能生成一个对象。怎么实现:类的构造函数声明为private或者protected,以防止被外部生成对象,类的内部保存一个static private的该类类型的指针,类的生成对象操作由类的一个public方法代劳。单例模式又分为懒汉模式和饿汉模式两种,参照网上相关文章,做了下面的总结:1. 饿汉模式//single原创 2017-07-20 19:23:36 · 7438 阅读 · 1 评论 -
设计模式的概念及其基本原则
1. 设计模式概念 在一定的环境中总能用固定的套路解决实际问题,这种套路就叫做设计模式。这些套路将问题标准化:对各部分进行抽象、归纳和解耦合。注意,设计模式的实现基础是多态。 设计模式可分为3个类别: (1)创建型模式:通常和对象的创建相关,涉及到对象实例化的方式(5种) 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式 (2)结构型模式:描述如何组合类和对象以原创 2017-12-29 18:22:35 · 1218 阅读 · 0 评论 -
Prototype(原型)模式
原型模式是一种对象创建型模式,该设计模式采取复制原型对象的方法来创建目标对象的实例,即使用原型模式创建的目标实例具有与原型一样的数据。 (1)由原型对象自身创建目标对象 (2)目标对象是原型的一个克隆(目标对象和原型对象具有相同的内存结果,相同的值) 注意,原型模式创建目标对象的实例,跟类的拷贝构造函数一样,涉及到深度拷贝、浅度拷贝问题。 原型模式适用于一个复杂的对象,具有自原创 2018-01-04 12:36:34 · 343 阅读 · 0 评论 -
Builder(建造者)模式
案例: 用户需要建造一个别墅和一个民居。 将别墅和民居的组成都抽象为一个门,一个墙和一个地面,建造别墅时分别是建造”别墅的门”、”别墅的墙”、”别墅的地面”,建造民居时则分别是建造”民居的门”、”民居的墙”、”民居的地面”。最简单的实现为: class House{public: void setFloor(string floor) { m_floor = floor; }原创 2018-01-03 19:21:18 · 357 阅读 · 0 评论 -
Bridge(桥接)模式
案例:某公司的产品有智能仪表和智能网关,可供选择的处理器有AM3352、S3C2440和tiny4412,智能仪表可以选择这3种处理器之一,同样智能网关也可以。 最简单的实现方式:class SmartGateway : public Product{public: void product_soc() { std::cout "Smart Ga原创 2018-01-11 18:36:42 · 1740 阅读 · 0 评论 -
Factory(工厂)模式
案例: 一个水果制造商根据客户的需求提供不同品种的水果。1. 简单工厂模式 该案例可用简单工厂模式实现。简单工厂模式属于类的创建型模式,又叫静态工厂模式。通过专门定义一个(工厂)类来负责创建其它(产品)类的实例,被创建的类通常具有共同的基类。 如上UML图,简单工厂模式中有3个角色: (1)工厂 工厂是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,工厂类可以被外界直原创 2018-01-02 18:39:28 · 720 阅读 · 0 评论