
设计模式
文章平均质量分 72
GreedySnaker
静悄悄的不知何时发起,却只见落幕时众人皆知,轰轰烈烈
展开
-
迭代器模式
一 简介一个聚合对象,提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构。针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的抽象层接口中充斥着各种不同遍历的操作。怎样遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能够提供多种不同的遍历方式,这就是迭代器模式所要解决的问题。二 UML图Iterator: 抽象迭代器ConcreteIterator: 具体迭代器Aggregate: 抽象聚合类ConcreteAggregate: 具体聚合类原创 2021-02-08 13:42:52 · 99 阅读 · 0 评论 -
访问者模式
一 简介在做面向对象的软件开发时我们往往想达到更高的代码可复用性和更合理的软件颗粒度。 根据《设计模式——可复用面向对象软件的基础》所说:“你必须找到相关的对象,以适当的颗粒度将他们回归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。二 UML图抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。它的方法个数理论上来讲与元素个数(Element的实现类个数)是一样的原创 2021-02-06 11:53:15 · 126 阅读 · 0 评论 -
状态模式
一 简介状态模式(State Pattern)也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变的同时改变对象的行为,使得看起来像是修改了类一样。状态模式中的类的行为是由状态决定的,不同的状态有不同的行为。状态模式的意图是让一个对象在其内部改变时行为也随之一起改变。状态模式的核心就是给每一种状态绑定一种行为。二 UML图State类:抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。ConcreteState类:具体状态,每一个原创 2021-02-06 10:23:29 · 229 阅读 · 0 评论 -
备忘录模式
一 简介Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象内部状态,并在需要的时候(undo/roback)回复对象以前的状态。二 UML图Originator-原生者 需要被保存状态以便恢复的那个对象Memento-备忘录 该对象由Originator创建,主要用来保存Originator的内部状态Caretaker-管理者 负责在适当的时间保存/恢复Originator对象的状态三 例子比如游戏里有重置,保存进度等等。本例就是设置人的钱,只要及时保存进度,就不会破产原创 2021-02-04 11:37:00 · 138 阅读 · 0 评论 -
策略模式
一 简介定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。属于行为型模式。二 UML图抽象策略角色(Strategy): 抽象策略类。具体策略角色(ConcreteStrategy):封装了继续相关的算法和行为。环境角色(Context):持有一个策略类的引用,最终给客户端调用。三 例子class Strategy{public: virtual void startWork() = 0;};//Strategy Ac原创 2021-02-04 10:28:33 · 130 阅读 · 0 评论 -
责任链模式
一 简介为请求创建一个接受者对象的链。这种模式给与请求的类型,对请求的发送者和接受者进行解耦。属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。二 UML类图Handler:定义一个处理请求的接口。一般还带一个设置下一个处理者的接口。ConcreteHandler:具体请求处理者,处理他负责处理的请求,或者将请求交给它的继承者。三 例子很多都用请假的例子,我觉得很形象class Reque原创 2021-02-03 18:02:10 · 106 阅读 · 0 评论 -
模板方法模式
一 定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。解决的问题提高代码复用性将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中 实现了反向控制。通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 & 符合“开闭原则”二 UML图AbstractClass(抽象类):在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对原创 2021-02-03 15:00:45 · 188 阅读 · 0 评论 -
解释器模式
一 定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。文法:即语法规则。在解释器模式中每一个语法都将对应一个解释器对象,用来处理相应的语法规则。它对于扩展、改变文法以及增加新的文法规则都很方便。解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在解释器模式中可以通过一种称之为抽象语法树(Abstract Syntax Tree, AST)的图形方式来直观地表示语言的构成,每一棵抽象语法树对应一个语言实例原创 2021-02-03 10:51:00 · 132 阅读 · 0 评论 -
代理模式
一 简介代理模式:为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能分离二 代理的种类:如果按照使用目的来划分,代理有以下几种:远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。 也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。虚拟(Virtual)代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需原创 2021-02-01 18:12:39 · 156 阅读 · 0 评论 -
组合模式
一 简介什么是组合模式?将对象组合成树形结构以表示“部分-整体”的层次结构。组合(Composite)模式使得用户对单个对象和组合对象的使用具有一致性。组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象。组合模式定义了“部分-整体”的层次结构,基本对象可以被组合成更大的对象,而且这种操作是可重复的,不断重复下去就可以得到一个非常大的组合对象,但这些组合对象与基本对象拥有相同的接口,因而组合是透明的,用法完全一致。组合模式就是把一些现有的对象或者元素,经过组合原创 2021-02-01 11:09:13 · 154 阅读 · 0 评论 -
外观模式
一 简介外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。二. UML类图该设计模式的参与者,分别是:Facade (ShishKebab) 分配用户请求给适当的子系统对象Subsystem classes实现子系统的功能,处理由Facade 分配的任务,没有Facade 的任何相关信息Client 用户三 例子比如我们想吃鱼香肉丝,这时候自己做,原创 2021-01-29 15:46:28 · 143 阅读 · 0 评论 -
中介者模式
一 中介者模式简介中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。实际开发过程中可能存在许多对象多对多的关系,如果对象直接持有其依赖对象的引用会造成关系混乱且难以维护。中介者模式把这种复杂的关联关系抽离出来使用一个中介者统一管理,网状结构转化为星型结构。单独看这两张图觉得和观察者模式不是一样的吗。但是其实是不一样的,中介者模式之间是可以进行交互的;但是观察者模式只能进行单向,即观察者将注原创 2021-01-28 18:05:57 · 174 阅读 · 0 评论 -
原型模式
一 摘要本章主要说明原型模式,该设计模式主要意图是:用原型实例指定创建对象,并且通过拷贝这些原型创建新的对象; 简单地说就是克隆一个和自己相同的对象。二. UML类图主要参与者该设计模式的参与者有三个,分别是:Prototype 抽象原型,克隆自生的抽象接口;ConcretePrototype 具体原型实现,实现克隆自生各个部件的具体实现接口;Client 用户,让一个原型克隆自生从而创建一个新的对象;三 例子//相当于类图中的Prototype,也就是原型class Hero原创 2021-01-28 11:03:35 · 175 阅读 · 0 评论 -
建造者模式
一. 作用建造者模式(Builder Pattern),旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。二. UML类图三 例子//Builderclass Hero{public: virtual void createQ() {} virtual void createW() {} virtual void createE() {} virtual void createR() {}};//ConcereteBuilderclass Gale原创 2021-01-27 16:08:58 · 158 阅读 · 0 评论 -
享元模式
一. 作用享元模式,顾名思义带有共享的意思,的确它就是用于共享对象的.意图:运用共享技术有效地支持大量细粒度的对象。系统反复使用较少数量的对象,他们差别较小,从而的=达到反复利用的效果二. UML类图参与者:Flyweight(抽象享元类):通常是一个抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)。ConcreteFlyweight(具体享元类):实现了抽象享元类,其实例称为享元对象;在原创 2021-01-27 11:26:11 · 239 阅读 · 0 评论 -
桥接模式
设计模式之桥接模式桥接模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里说的实现分离,并不是说然抽象类与派生类分离,这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。其UML图如下:结合上图理解一下其定义。抽象部分指的是Abstraction或者RefinedAbstraction。实现部分指的是Implementor。以为抽象部分得实现有多种变化,为了减少耦合,所以把实现部分得变化封装起来,通过组合得方式实现。这就是定义中说得将抽象部分与它得实现部分分离。而定义中说得实现原创 2021-01-25 17:52:54 · 243 阅读 · 0 评论 -
命令模式
在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。1. UML类图2. 参与者Command:声明执行操作的接口,核心为Execu原创 2021-01-25 10:55:39 · 169 阅读 · 0 评论 -
工厂模式
工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。听上去差不多,都是工厂模式。**简单工厂**它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。有点抽象,举个例子就明白了。有一家生产厂家,它只有一个工厂,能够生产两种型号的产品。客户需要什么样的产品,一定要显示地告诉生产工厂。简单工厂UML图下面给出一种实现方案。enum ProductType{ em_ProductA, em_ProductB,};/.原创 2021-01-14 10:47:14 · 282 阅读 · 1 评论 -
单例模式
单例模式一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。方式一(饿汉模式)不管你将来用不用,程序启动时就创建一个唯一的实例对象构造函数私有提供一个静态的方法返回单例声明一个静态的单例成员拷贝构造和赋值声明为delete函原创 2021-01-13 16:32:53 · 133 阅读 · 0 评论 -
装饰者模式
装饰者模式与适配器模式的区别装饰者的目的是通过组合的方式给某个对象增加新的功能,与适配器不同,适配器并不增加新的功能,而是将对象的某个功能转换成另一个接口需要的功能,从而达到适配的功能,此外还有代理模式,代理则是将某个公共处理抽象出代理层,通过代理使用对象,代理更多的是将代理逻辑。装饰者模式原则封装变化多用组合,少用继承针对接口编程,不针对实质编程为交互对象的松耦合设计而努力对扩展开放,对修改关闭UML图装饰者模式实例例如男人和女人可以被认为是被装饰者,做饭和洗衣服可以理解原创 2021-01-13 10:23:41 · 154 阅读 · 1 评论 -
适配器模式
一 什么是适配器模式平常生活中,我们使用最多的就是“电源适配器”了,电源适配器可以将220V市电转换为我们需要的电压,如手机充电器、笔记本电源等。另外,关于手机数据线问题,经常会遇到苹果Lightning、安卓MicroUSB、安卓Type-C接口不兼容问题,也就产生了三者之间的相互转换接头(适配器)。因此,适配器就是将一个接口转换为我们需要的接口,而不是改变目的者的接口。二适配器模式含义适配器(Adapter )模式, 就是定义一个第三方封装类,将一个类的接口转换成客户期望的另外一个接口,使得原本原创 2021-01-12 11:23:15 · 692 阅读 · 1 评论 -
观察者模式
简述观察者模式(Observer Pattern),定义了对象间的一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(被观察者)。当主题对象的状态发生更改时,会通知所有观察者,让它们能够自动更新。抽象观察者class Observer //基类观察者{public: virtual void onUpdate() = 0; //可以不为纯虚};class Observer1 :public Observer//{public: virtual void onUpdate原创 2021-01-11 16:33:30 · 218 阅读 · 0 评论