
设计模式
sing a song_^^
这个作者很懒,什么都没留下…
展开
-
设计模式六大原则
1.开闭原则。一个软件实体,如类,模块和函数应该对外扩展开发,对内修改关闭。解读:用抽象构建框架,用实现扩展细节。不以改动原有类的方式来实现新需求,而是应该以实现事先抽象出来的接口(或具体类继承抽象类)的方式来实现。优点:开闭原则的优点在于可以在不改动原有代码的前提下给程序扩展功能。增加了程序的可扩展性,同时也降低了程序的维护成本。2.单一职责原则。一个类只允许有一个职责,即只...原创 2020-02-03 11:33:15 · 298 阅读 · 0 评论 -
设计模式(二十三) 建造者模式 C++
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。何时使用:一些基本部件不会变,而其组合经常变化的时候。如何解决:将变与不变分离开。变的构造方法,...原创 2020-02-03 11:11:16 · 313 阅读 · 0 评论 -
设计模式(二十二)观察者模式 C++
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。观察者模式所做的内容就是解耦应用场景之一就是数据中心和多个业务单元的分离实现方式就是每一个观察者都要保存一个被观察者的指针。被观察者注册观察者指针,通过操作观察者指针达到和观察者通信的目的。#include <...原创 2020-02-03 10:29:18 · 268 阅读 · 0 评论 -
23 种设计模式C++实现
设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:...原创 2020-02-03 09:14:20 · 733 阅读 · 0 评论 -
设计模式(二十一)迭代器模式
意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。当需要访问一个聚集对象,且不论这个对象是什么都需要遍历的时候就应该考虑迭代器模式#include <iostream>using namespace std;typedef int Object;#define SIZE 5 class MyIterator{public: vi...原创 2020-02-02 16:55:06 · 181 阅读 · 0 评论 -
设计模式(二十)解释器模式 C++
解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。#include <iostream>#include <string>#includ...原创 2020-02-02 16:15:45 · 175 阅读 · 0 评论 -
设计模式(十九)访问者模式 C++
访问者模式的理念是将数据结构和算法之间的解耦解开。访问者模式的优点是使得算法变化变的容易,缺点是增加新的数据结构 困难了。所以说它适用于数据结构相对稳定的系统。技术思想:数据结构对象包含访问者指针,数据结构进行操作的时候把自己的指针传递给访问者,由访问者根据数据结构的不同执行响应的算法访问者模式包含以下主要角色。抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每...原创 2020-02-02 14:59:14 · 181 阅读 · 0 评论 -
设计模式(十八)桥接模式 C++
桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。桥接模式号称是最难理解的模式,其实不然。“将抽象部分与它的实现部分分离”,意思是说实现系统可能会有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少之间的耦合。比如运行手机软件,手机有手机的分类...原创 2020-02-02 10:30:46 · 303 阅读 · 0 评论 -
设计模式(十七)享元模式 C++
享元模式是设计模式中少数几个以提高系统性能为目的的设计模式。他的核心思想是:如果一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次使用都创建新的对象。享元模式的主要优点是:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。其主要缺点是:为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。 读取享元模...原创 2020-02-01 16:15:48 · 178 阅读 · 0 评论 -
设计模式(十六)组合模式 C++
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。组合模式包含以下主要角色。抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访问和管理子...原创 2020-02-01 11:37:02 · 235 阅读 · 0 评论 -
设计模式(十五)装饰模式 C++
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。好处就是把核心功能和装饰功能区分开来了(要想真正理解装饰模式的代码实现,首先要理解多态的实现)装饰模式主要包含以下角色。抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。 具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为...原创 2020-02-01 10:43:35 · 273 阅读 · 0 评论 -
设计模式(十四)原型模式C++
实际上就是动态抽取 当前对象 运行时 的 状态在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例...原创 2020-01-31 14:21:18 · 219 阅读 · 0 评论 -
设计模式(十三)外观模式 C++
介绍“用一句话说明就是分层设计,为复杂的模块套个壳~“”意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。何时使用:1、设计初期阶段,有意识得将不同的两个层分离,比如经典的三层结构......2、开发阶段,子系统因为不断的重构演化而变得越来越...原创 2020-01-31 13:24:35 · 177 阅读 · 0 评论 -
设计模式(十二)状态模式 C++
状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。设计的时候把状态对象和目标对象分离。目标对象执行行为的时候,把目标对象传递给状态对象A,如果满足状态A的条件,执行状态A的方法,不满足状态对象A,把目标对象传递给状态对象B,如果满足状态B的条件,执行状态B的方法,以此类推...原创 2020-01-31 11:47:50 · 152 阅读 · 0 评论 -
设计模式(十一)模板模式 C++
模板模式在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式介绍意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写...原创 2020-01-31 10:26:58 · 154 阅读 · 0 评论 -
设计模式(十)中介者模式C++
中介者模式中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。介绍意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关...原创 2020-01-30 14:09:18 · 180 阅读 · 0 评论 -
设计模式(九)备忘录模式 C++
备忘录模式备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我...原创 2020-01-30 09:58:51 · 259 阅读 · 0 评论 -
设计模式(八)适配器模式 C++
适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。应用场景:1、系统的数据和行为都正确,但是接口不符时,我们应该考虑适配器,目的是使得接口匹配。适配器模式主要是应用于希望服用一些现在的类,但是接口又于复用环境不一致的情况。比如对早起代码功能复用上会很有实际价值。这是在设计后期使用适配器的情况不过对于接口不一致的情...原创 2020-01-29 21:05:29 · 204 阅读 · 0 评论 -
设计模式(七)代理模式C++
代理模式,定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的访问。通俗的来讲代理模式就是我们生活中常见的中间人。比如说,小李想追求一个小姐姐娇娇,但是小李不知道怎么做,他委托戴励去追,这样的一个过程就是代理模式下面是结构图#include<iostream>#include <windows.h>#include <stri...原创 2020-01-29 10:32:23 · 214 阅读 · 0 评论 -
设计模式(六)策略模式C++
策略模式定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资的算法进行硬编码,而是能自由的变化的。这就是策略模式。角色: 抽象策略角色(Strat...原创 2020-01-28 21:01:36 · 222 阅读 · 0 评论 -
设计模式(五)抽象工厂 C++
每一个设计模式的产生都是 为了应对某些应用场景。 简单工厂可以由一个工厂生产不同的产品,缺点是如果不断增加产品,则需要不断修改工厂,违反了开放封闭原则,(类、模块、函数可以扩展,但是不可以修改)。 于是,就出现了工厂方法模式。所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。打个比方现在有A、B两种产品,那么久开两个工厂。工厂A负责...原创 2020-01-28 18:08:29 · 242 阅读 · 0 评论 -
设计模式(四)工厂方法模式 C++
工厂方法介绍意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。关键代码:创建过程在其子类执行。应用实例:1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来...原创 2020-01-28 10:27:59 · 290 阅读 · 0 评论 -
C++ 简单工厂(静态工厂方法)
定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程假设有一个工厂,他能生产出A、B两种产品。当客户需要产品的时候一定要告诉共产是哪种产品,是A还是B。当新增...原创 2020-01-27 17:19:20 · 1098 阅读 · 1 评论 -
设计模式(三)命令模式 C++
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令(Command):为所有命令声明了一个接口。调用命令对象的 execute()方法,就可以让接收者进行相关的操作。这个接口也具备一个 undo() 方法。命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分隔开,从而使新的命令类可以很容易被加入到系统当中组成部分1...原创 2020-01-15 17:09:20 · 212 阅读 · 0 评论 -
设计模式(二)职责链模式 C++
行为型设计模式一共有12个,下面介绍下第一个:职责链模式,它是对象行为型模式一、意图: 职责链模式:使得很多对象都有机会处理请求,从而避免请求发送者和接收者之间的耦合关系。将这些对象形成 一条链,沿着这条链处理请求,之道有一个对象处理为止二、适用性: 1、使得多个对象可以处理同一请求,对象请求顺序可自行确定 2、不明确指定接收者的情况,也就是不知道谁来处理请求的情况下...原创 2020-01-14 07:33:07 · 199 阅读 · 0 评论 -
设计模式(一)C++ 单例模式
#ifndef D_SINGLETON_h#define D_SINGLETON_h#include <mutex>class Singelton{public: static Singelton* GetInstance(); ~Singelton();private: Singelton();public: static std::mutex m_mut...原创 2019-07-03 14:08:45 · 324 阅读 · 0 评论