设计模式
文章平均质量分 88
IT_Kyle
这个作者很懒,什么都没留下…
展开
-
设计模式:解释器模式
解释器模式(Interpreter)介绍:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构件一个解释器,该解释器通过解释这些句子,来解决该问题。优点:扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。容易实现。在语法树中的每个原创 2020-12-09 15:19:42 · 119 阅读 · 0 评论 -
设计模式:中介者模式
中介者模式(Mediator)介绍:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互中介者模式又叫调停模式,它是迪米特法则的典型应用。如果一个系统里各个对象之间存在多对多的相互关系,可以将对象之间的一些交互行为从各个对象中分离出来,集中封装在一个中介者对象中,使其耦合松散,并由中介者统一协调。通过中介者,对象之间的多对多关系就简化了相对更简单的一对多关系。优点:类之间各司其职,符合迪米特法则。降低了对象之间的耦合性,使得对象易于独立原创 2020-12-09 14:50:35 · 91 阅读 · 0 评论 -
设计模式:访问者模式
访问者模式(Visitor)介绍:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。优点:扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。灵活性好。访问者模式将数据结构与作用于结构上的操作解耦,使得操作集原创 2020-12-09 12:00:50 · 120 阅读 · 0 评论 -
设计模式:状态模式
状态模式(State)介绍:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。优点:结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。状态类职责明确,有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。缺点:状态模式的使用必然会增加系统的原创 2020-12-09 09:54:45 · 72 阅读 · 0 评论 -
设计模式:备忘录模式
备忘录模式(Memento)介绍:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。备忘录模式的核心是设计备忘录类以及用于管理备忘录的管理者类。优点:提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态原创 2020-12-08 16:13:59 · 96 阅读 · 0 评论 -
设计模式:责任链模式
责任链模式(Chain of Responsibility)介绍:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了。优点:降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的原创 2020-12-08 14:57:15 · 226 阅读 · 1 评论 -
设计模式:命令模式
命令模式(Command)介绍:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。优点:通过引入中间件(抽象接口)降低系统的耦合度。扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。方便实现 Undo 和 Redo 操作。命令模式可以与后面介绍的备忘录模式结合,实现命令的撤销与恢复。可以在现有命原创 2020-12-07 17:57:51 · 192 阅读 · 1 评论 -
设计模式:迭代器模式
迭代器模式(Iterator)介绍:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。优点:访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口。缺点:增加了类的个数,这在一定程度上增加了系统的复杂性。主要角色。抽象聚合(Aggregate)角原创 2020-12-07 16:58:27 · 64 阅读 · 0 评论 -
设计模式:观察者模式
观察者模式(Observer)介绍:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式又被称为发布-订阅模式(Publish-Subscribe)、模型-视图模式(Model-View)、源-监听器模式(Source-Listener)、从属者模式(Dependents)。优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。缺点:目标与观察者之间的依原创 2020-12-07 14:52:46 · 67 阅读 · 0 评论 -
设计模式:模板方法模式
模板方法模式(Template Method)介绍:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤优点:它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。它在父类中提取了公共的部分代码,便于代码复用。部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。缺点:对每个不同的实现都需要定义一个子类,这会导致类的个数增原创 2020-12-05 17:39:54 · 79 阅读 · 0 评论 -
设计模式:策略模式
策略模式(Strategy)介绍:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。优点:多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句。策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。原创 2020-12-05 16:31:58 · 125 阅读 · 0 评论 -
设计模式:外观模式
代理模式(Facade)介绍:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观(Facade)模式是“迪米特法则”的典型应用优点:降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。降低了大型软件系统中的编译依赖性,简化了系统在原创 2020-12-04 18:24:56 · 103 阅读 · 0 评论 -
设计模式:代理模式
代理模式 (Proxy)介绍:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。。访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。优点:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可原创 2020-12-04 16:42:02 · 86 阅读 · 0 评论 -
设计模式
设计模式,是学一遍忘一遍,一遍又一遍,所以就重新收拾心情,再次学习。为了将代码的重用性和可维护性,就需要多学习设计模式。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式常规有23种设计模式分为三类:创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7种):适配器模式、装饰者模式、桥接模式、组合模式、代理模式、外观模式、享元模式行为型模式(11种):策略模式、原创 2020-12-04 12:10:44 · 370 阅读 · 0 评论 -
设计模式:装饰模式
装饰模式介绍:动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。简单点说就是:人,要打扮自己,如穿衣服,戴帽子,化妆等,但本质还是人。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。何时使用:在不想增加很多子类的情况下扩展类。如何解决:将具体功能职责划分,原创 2020-12-04 11:38:29 · 116 阅读 · 0 评论 -
设计模式:组合模式
组合模式介绍:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。简单点说就是:我有的东西我的子类也可以有,子类的子类也可以有。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。原创 2020-12-03 18:03:19 · 80 阅读 · 0 评论 -
设计模式:桥接模式
桥接模式介绍:将抽象部分与实现部分分离,使它们都可以独立变换。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。缺点:桥接模式原创 2020-12-02 19:43:38 · 120 阅读 · 0 评论 -
设计模式:适配者模式
适配者模式介绍:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。简单点说就是:我要把你改成我需要的样子。适配方法:类适配模式 和 对象适配模式类适配模式:适配器类通过继承适配者类,并重新实现适配者的具体接口来达到适配客户所需要的接口的目的对象适配模式:适配器类通过在类中实例化一个适配者类的对象,并将其封装在客户所需功能的接口里,达到最终的适配目的例子:画画者用具体的画画装备来画画画画装备就是适配器适配者就是画笔类,形状类#inc原创 2020-12-01 19:25:25 · 372 阅读 · 0 评论 -
设计模式:原型模式
原型模式介绍:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。简单点说就是:你的都是我的克隆方法:浅拷贝和深拷贝1.浅拷贝:你的也是我的,我和你共用2.深拷贝:我的是我的,你的是我的,只不过咱俩的看上去一样,但是地址不一样。例子:学生的名字和ID不同,但是课程一样#include "iostream"#include "string"using namespace std;//课程表class Schedule{public: Schedule原创 2020-12-01 09:39:01 · 78 阅读 · 0 评论 -
设计模式:建造者模式
建造者模式介绍:将复杂对象的构建和其表示分离,使得同样的构建过程可以创建不同的表示。“比如:我要建房子,房子的基本框架都一样,但是不同的建造商建造出来的房子是不一样”。主要解决:一个复杂对象的创建工作,由各个部分的子对象用一定的算法构成;由于需求变化,这个复杂对象的各个部分经常面临变化,但将它们组合在一起的算法却相对稳定。缺点:1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。建造者模式的结构:1.产品:具体的产品对象(House)2.抽象建造者:创建一原创 2020-11-30 17:15:20 · 83 阅读 · 0 评论 -
设计模式:单例模式(懒汉式)
单例模式(懒汉式)#include "iostream"using namespace std;class CSingleton{public: CSingleton(){}; ~CSingleton(){}; static CSingleton *GetInstance() { static CSingleton m_Instance; return &m_Instance; } void show() { cout << "我是单例模式" <原创 2020-11-27 18:24:12 · 110 阅读 · 0 评论 -
设计模式:工厂模式
工厂模式介绍 :设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象使用了C++多态的特性,将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。在项目复杂的情况下,可以便于子类对象的创建工厂模式的实现方式:单工厂模式工厂方法模式抽象工厂模式1.简单工厂模式特点:需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。缺陷:扩展性非常差,新增产品.原创 2020-11-27 12:47:02 · 137 阅读 · 0 评论 -
C++ 用命名模式写撤销操作
1.首先建立命令虚基类.h//基类虚函数class Command{public: Command(void){}; virtual ~Command(void){};public: virtual void Redo() = 0; virtual void Undo() = 0;};2.创建管理命令的类.h#include "Command.h"#i...原创 2019-08-22 19:22:25 · 333 阅读 · 0 评论 -
设计模式
1、工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式 1)、简单工厂模式:主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。typedef enum{ T80 = 1, T99}TankType;class Tank{public: virtual void message() = 0;};class Tank...转载 2019-01-25 13:58:53 · 157 阅读 · 0 评论 -
状态模式 简单代码实现
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。#include "iostream"using namespace std;/*** 电视状态接口,定义了电视操作的函数*/class TvState{...原创 2019-03-01 15:29:55 · 555 阅读 · 0 评论