
设计模式
艾莉欧
个人网站:www.shienh.com
展开
-
设计模式-迭代器模式
迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。该模式在现代c++中已经过时。伪代码如下:#include <QCoreApplication>#include <iostream>using namespace std;template <typename T>class Iter...原创 2020-02-02 09:48:28 · 202 阅读 · 0 评论 -
设计模式-中介者模式
中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。#include <QCoreApplication>#include <iostream>using namespace std;class Person;class ...原创 2020-02-01 09:30:22 · 179 阅读 · 0 评论 -
设计模式-解析器模式
解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。#include <QCoreApplication>#include <iostream>#include <map&g...原创 2020-01-31 09:12:42 · 170 阅读 · 0 评论 -
设计模式-访问者模式
访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。#include <QCoreApplication>#include <iostream>usi...原创 2020-01-30 09:30:08 · 99 阅读 · 0 评论 -
设计模式-职责链
职责链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。#include <QCoreApplication>#include <iostream>#include <str...原创 2020-01-29 10:14:48 · 117 阅读 · 0 评论 -
设计模式-组合模式
组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。#include <QCoreApplication>#include <iostream>#include <list>using namespace std;cla...原创 2020-01-28 09:19:43 · 82 阅读 · 0 评论 -
设计模式-状态模式
状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。#include <QCoreApplication>#include <iostream>using namespace std;class NetworkState{public: NetworkState* ...原创 2020-01-27 10:48:15 · 115 阅读 · 0 评论 -
设计模式-备忘录模式
备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。#include <QCoreApplication>#include <iostream>#include <string>using namespace std;c...原创 2020-01-26 11:55:49 · 138 阅读 · 0 评论 -
设计模式-享元模式
享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。#include <QCoreApplication>#include <iostream>#include <map>using namespace std;...原创 2020-01-26 10:33:33 · 95 阅读 · 0 评论 -
设计模式-原型模式
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节#include <QCoreApplication>#include <iostream>using namespace std;clas...原创 2020-01-25 20:26:51 · 104 阅读 · 0 评论 -
设计模式-桥接模式
桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。#include <QCoreApplication>#include <iostream>#include <string>using namespace std;class MessageIm...原创 2020-01-25 19:48:24 · 123 阅读 · 0 评论 -
设计模式-观察者模式
观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。#include <QCoreApplication>#include <iostream>#include <list>using nam...原创 2020-01-24 08:46:58 · 155 阅读 · 0 评论 -
设计模式-模板方法模式
模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。#include <QCoreApplication>#include <iostream>using namespace std;class DrinkTem...原创 2020-01-23 19:30:05 · 158 阅读 · 0 评论 -
设计模式-策略模式
策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理#include <QCoreApplication>#include <iostream>using n...原创 2020-01-23 19:10:19 · 117 阅读 · 0 评论 -
设计模式-命令模式
命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。#include <QCoreApplication>#include <iostream>#include <string>#include <queue...原创 2020-01-23 18:58:17 · 109 阅读 · 0 评论 -
设计模式-装饰模式
装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰(Decorator)模式的主要优点有:采用装饰模式扩展对象的功能比采用继承方式更加灵活。 可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。其主要缺点是:装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。#inclu...原创 2020-01-22 10:04:39 · 118 阅读 · 0 评论 -
设计模式-适配器模式
适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。#include <QCoreApplication>#include <iostrea...原创 2020-01-22 09:02:53 · 101 阅读 · 0 评论 -
设计模式-外观模式
外观模式:一组具有类似功能的类群。使用场景:如ktv模式,在唱k的时候需要打开电视,关掉灯,打开音响。打开麦克风,打开dvd。每个操作都是一个小系统,外观类就是唱k。通过唱k类调用各个系统。#include <QCoreApplication>#include <iostream>using namespace std;class System1{pub...原创 2020-01-21 08:55:25 · 147 阅读 · 0 评论 -
设计模式-代理模式
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下。一个对象不适合或者不能直接引用另一个对象。代理在它们中起到中介的作用。常见代理:代理服务器,缓冲服务器#include <QCoreApplication>#include <iostream>using namespace std;class AbstractInterface{public:...原创 2020-01-21 08:14:40 · 112 阅读 · 0 评论 -
设计模式-建造者模式
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。建造者(Builder)模式的主要角色如下。产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者...原创 2020-01-20 14:42:11 · 80 阅读 · 0 评论 -
设计模式-工厂方法模式
工厂方法模式:在简单工厂的基础上,抽象出工厂类。每创建一个类,创建对应的工厂优点:用户添加新的产品的时候,只需要添加具体的产品类和对应的具体工厂类,无需对原工厂进行修改,符合开闭原则 2.用户只需要知道工厂的名称能得到对应的产品。缺点:类的个数成倍增加,增加维护成本#include <QCoreApplication>#include <iost...原创 2020-01-20 08:46:03 · 140 阅读 · 0 评论 -
设计模式-简单工厂模式
简单工厂模式:自己在写业务函数的时候或者类创建对象的时候,不想创建,只想用。优点:客户端和实现类解耦 对于创建复杂的情况,不需要考虑缺点:1.简单工厂模式,增加新的功能是通过修改源代码实现,不符合开闭原则2.这个工厂类的职责过重,如果该类出问题,会影响该很多许多使用该工厂的模块#include <QCoreApplication>#include <i...原创 2020-01-09 21:44:44 · 97 阅读 · 0 评论 -
设计模式-单例模式
单例模式:这个系统中只有一个对象的类。如windows的任务管理器,数据库对象。单例模式的分为饿汉式和懒汉式。懒汉式: 发现没有对象再构造,碰到多线程是不安全的饿汉式: 先构造对象,对于构造对象比较积极(推荐)单例的释放:单例不需要考虑释放,如果要释放的话,可以返回引用。单例类的构建要点:构造函数要私有 私有的当前类的指针变量(引用) 提供静态的对外接口。获取单例对象 ...原创 2020-01-09 21:08:55 · 86 阅读 · 0 评论