![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 79
碎步の流年
这个作者很懒,什么都没留下…
展开
-
设计模式(25)访问者模式
访问者模式简介在项目开发中,有时会有复杂操作的结构对象,不同的访问者会对此对象做出不同的操作,访问者模式就是为了解决此种问题。访问者模式有访问者和被访问元素两个角色。被访问元素往往结构复杂,对于不同的访问者,会有不同的访问方式,且被访问元素通常不是单一存在的,而是以集合的形式存在一个对象结构中,访问者可以通过遍历的方式对其一一访问。访问者模式:表示一个作用于某对象结构中的各个元素的操作。访问者模式让用户可以在不改变各元素的前提下定义作用于这些元素的新操作。访问者模式结构访问者模式结构:Vis原创 2021-04-07 18:37:29 · 83 阅读 · 0 评论 -
设计模式(24)模板模式
模板模式简介模板模式就是类似于一种类的继承的代码复用技术,此种模式结构只存在基类和派生类之间的关系模板方法模式:定义一个算法的框架,将一些步骤延迟到子类中,模板模式可以使得子类不改变一个算法的接口即可重新定义某些算法的特定步骤。模板方法结构模板模式的结构只有两个角色:AbstractClass(基类):即抽象类,在基类中定义或声明了一系列基本操作,这些操作可以是具体或者是者抽象的,每一个操作都对应算法的一个步骤,这些步骤在其派生类中都可以重定义。基类规定了算法的流程框架,模板方法由基类定义或声原创 2021-04-07 18:16:00 · 85 阅读 · 0 评论 -
设计模式(23)策略模式
策略模式简介策略模式,用于实现不同的算法之间的自由切换,对应于解决某一问题的一个算法族,允许用户从该算法中任意选择一个算法,同时还可以很方便的更换算法或增加新的算法。策略模式将算法族中的每一个算法都封装成一个类,每一个类称为一个策略(Strategy)。策略模式:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法可以独立于使用它的客户而变化。策略模式结构策略模式由上下文类和策略类组成,具体如下:Context(上下文类) :上下文类是使用算法的角色,可以在解决不同具体原创 2021-04-07 17:53:14 · 65 阅读 · 0 评论 -
设计模式(22)状态模式
状态模式简介在实际开发中,通常会遇到有多个状态的对象,这个对象在不同的状态下,都会有不同的行为。状态模式的重点在于状态转换,很多时候,对于一个对象的状态,我们都是让这个对象包含一个状态的属性,这个状态属性记录着对象的具体状态,根据状态的不同使用分支结构来执行不同的功能;就像上面说的,类中存在大量的结构类似的分支语句,变得难以维护和理解。状态模式消除了分支语句,就像工厂模式消除了简单工厂模式的分支语句一样,将状态处理分散到各个状态子类中去,每个子类集中处理一种状态,这样就使得状态的处理和转换清晰明确。状原创 2021-04-07 16:50:35 · 113 阅读 · 0 评论 -
设计模式(21)观察者模式
观察者模式简介ROS系统的消息传递就是一种观察者模式,一个节点发布出消息,订阅此消息的节点会进入回调函数,并做出相应的动作。观察者模式定义了一种一对多的依赖关系,当一个被观察对象发生变化时,所有依赖被观察对象的观察者均会被通知且自动更新状态,这种交互方式被称为发布-订阅模式。观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。观察者模式结构观察者模式由观察者和观察目标组成,为便于扩展,两个角色都设计了抽象层。Subject(目原创 2021-04-07 16:16:39 · 227 阅读 · 0 评论 -
设计模式(20)备忘录模式
备忘录模式简介使用Git的时候,代码有问题了,可以checkout到上一个版本,备忘录模式就是这种机制,用户可以方便的制定恢复到指定的某个历史状态。Ctrl + Z 就是一种备忘录模式。备忘录模式:在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。备忘录模式结构备忘录模式主要有以下角色:Originator(原发器):通过创建一个备忘录类存储当前的内部状态,也可以使用备忘录来恢复其内部状态,通常是将系统中需要保存内部状态的类设计原创 2021-04-07 15:49:23 · 96 阅读 · 0 评论 -
设计模式(19)中介者模式
中介者模式如果在一个系统中,各个对象之间存在多对多的相互关系,可以将对象之间的一些交互行为从各个对象中分离出来,集中封装在一个中介者对象中,使其耦合松散,并由中介者统一协调。通过中介者,对象之间的多对多关系就简化为了更简单的一对多的关系。中介者模式:定义一个对象来封装一系列对象的交互。中介者模式使各个对象之间不需要显示地相互引用,从而使其耦合松散,而且用户可以独立地改变它们之间的交互。中介者模式简介由图可知,中介者模式主要有以下角色:Mediator(抽象中介者):声明一个用于与各个同事对象原创 2021-04-07 15:24:59 · 110 阅读 · 0 评论 -
设计模式(18)迭代器模式
迭代器模式简介在C++标准库中,有专门的迭代器的额库,这里的迭代器模式与标准库中的迭代器功能差不多,都是对一个包含有许多个对象实例的集合进行访问和获取,另外要取集合的首位元素,末位元素,在某个位置的元素等。针对这种集合对象的遍历,迭代器模式是一种很有效的解决方案,在实际工作中使用频率也很高。迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式结构迭代器模式结构中包含聚合和迭代器两个层次的结构。为方便扩展,迭代器模式常常和工厂方法模式结合。由图可知,迭代原创 2021-04-07 14:56:26 · 94 阅读 · 0 评论 -
设计模式(17)解释器模式
解释器模式简介如果在项目开发过程中,一种特定类型的问题发生的频率特别高,那么就可以将该问题的各个实例表述为一个简单语言中的句子,这样就可以通过设计一个解释器,此解释器可以通过解释该句子,来解决此问题。解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式结构解释器模式的结构:AbstractExpression(抽象表达式):声明了抽原创 2021-04-07 11:42:51 · 521 阅读 · 0 评论 -
设计模式(16)命令模式
命令模式简介老样子,为了便于理解这个模式,先举个生活中类似的例子。比如,在使用手机买东西的时候,点了一下付款,然后输入密码就可以完成购物,在点击付款的时候,用户是不会在意手机后台调用了哪些函数,与后台发送了什么数据,进行了哪些安全的校验,同样,手机与后台也同样不知道,具体是谁在使用这个手机和软件,命令的发送方和接收方没有任何实际关联。在设计模式中,命令模式就是解耦了命令的发送者和接受者,发送者和接受者之间没有直接引用关系,发送者只要知道如何发送请求,不必知道请求是如何完成的。命令模式:将一个请求封装为原创 2021-04-02 15:53:50 · 88 阅读 · 0 评论 -
设计模式(15)职责链模式
职责链模式简介在公司提交某个流程之后,一般需要多级领导审批。实际代码开发中,也会遇到这种制度,不同的代码模块只能有特定的权限,职责链模式解决了这种问题。职责链模式又叫责任链模式。很多情况下,可以处理某个请求的对象可能不止一个,请求可以沿着某一条对象之间形成的关系一级一级由下家传递到上家,形成一条链——职责链。职责链可以是直线,也可以是环或树形结构。常见的职责链形式是直线。链上的每一个对象都是请求的处理者,客户端要做的仅仅是发送请求,不需要关心请求的处理细节过程。由此,职责链模式将请求者和请求的接收者解耦原创 2021-04-02 15:13:51 · 85 阅读 · 0 评论 -
设计模式(14)代理模式
代理模式简介代理模式,不好理解,但是代购都是知道的,需要买国内买不到的东西时,就需要找个能买到的代购帮忙买一下。代理模式的思路,类似于代购,当客户端不能访问一些资源或者对象时,可以通过一个代理来间接访问,这种模式就是代理模式。代理模式在软件设计中广泛应用,而且产生的变种很多,如远程代理、虚拟代理、缓冲代理、保护代理等。代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。代理模式是一种对象结构型模式,在该模式中引入了一个代理对象,在客户端和目标访问对象之间起到中介的作用。代理原创 2021-04-01 18:17:05 · 131 阅读 · 0 评论 -
设计模式(13)享元模式
享元模式简介工程师在撸代码的时候,会通过键盘的输入,键入相关的代码和指令,通过敲击不同的按键进行组合,形成了各种各样的代码,以便实现各种各样的功能。其中,值得注意的是,无论实现什么样的功能,具体的代码也是由键盘上有限的按键输入进来的。整个开发项目中,会存在大量的相同或者类似的重复使用的对象,针对这一场景,享元模式应运而生。享元模式通过共享技术实现相同或相似的细粒度对象的复用,提供了一个享元池存储已经创建好的对象,并通过享元工厂类将享元对象提供给客户端使用。享元模式:运用共享技术有效地支持大量细粒度对原创 2021-04-01 17:51:21 · 106 阅读 · 0 评论 -
设计模式(12)外观模式
外观设计模式先举个例子对这个模式进行一个说明,在公司上班需要买些装备,只需要告诉采购具体的装备名称型号,然后采购会从市场中买回来所有的装备。员工不需要具体知道采购的采购过程,只需要和采购沟通完毕后,采购会将需要的设备买好送过来。外观模式的功能就和上述类似,它提供了一个外观角色封装了多个复杂的子系统,简化了客户端和子系统之间的交互,降低了系统软件之间的强耦合。如果没有外观类,不同的客户端在需要和多个不同的子系统交互,系统中将存在复杂的引用关系,引入了外观类,原有的复杂的引用关系都由外观类实现,不同的客户端原创 2021-04-01 16:30:38 · 80 阅读 · 0 评论 -
设计模式(11)装饰模式
装饰模式简介在软件设计中,对现有的对象进行功能扩展,使得对象更能符合客户的需求。装饰模式可以在不改变一个对象本身的条件下,给对象新增额外的新行为。装饰模式是一种类似于继承的技术。通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有对象的方法,还可以增加新的方法,以扩充原有类的功能。装饰模式:动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。装饰模式结构如下原创 2021-04-01 15:38:12 · 85 阅读 · 0 评论 -
设计模式(10)组合模式
组合模式简介一个公司的组织结构,是类似于一棵树的结构,每个基层员工就像一片树叶,同一个树枝上的树叶算作一个小组,小组又属于某个部门,部门有属于某地的分公司,总公司则管理着所有的分公司。组合模式就是类似于这种结构,组织模式关注包含叶子节点和容器节点的结构以及他们构成的组织形式。这样的组织结构特点:叶子节点不在包含成员对象容器节点可以包含成员对象,所包含的对象可以是叶子节点,也可以是容器节点这些节点通过递归的方式组合成了一个树形结构组合模式为叶子节点和容器节点提供了公共的抽象构建类,客户端无需原创 2021-04-01 14:17:41 · 124 阅读 · 0 评论 -
设计模式(9)桥接模式
桥接模式简介为了便于理解,先举个实际生活中的例子,比如,工厂里面有多个车间,车间1内有类型A的机器,车间2有类型B的机器,然后,新引进了一个类型C的机器,那么总不至于为了这个机器C在新建一个车间3吧?实际的情况是,一个车间可以使用不同的类型机器,只要车间够大,甚至可以将所有类型的机器都放在一个车间里。首先,一个车间里必须有相应的机器,车间和机器之间有将强的耦合,但是不同的机器之间无任何耦合,而且,新建一个车间后,同时可以将现有的机器迁移过去继续使用。车间和机器之间有耦合,但是两者可以很好的解耦,而且解原创 2021-04-01 10:47:56 · 96 阅读 · 0 评论 -
设计模式(8)适配器模式
适配器模式简介生活中有各种各样的适配器,比如,网络适配器,电源适配器等。在软件设计中,有时候也需要用到类似适配器这种角色。使得在当需要使用的类接口不兼容时,可以通过软件适配器来协调这些不兼容的类。因此,适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。适配器模式结构适配器模式具体结构:适配器类(Adapter):适配器与适配者之间是继承或实现关系;适配者类(Adaptee):适配器与适配者之间是关联关系。目标抽象类(Target):定义客户所需原创 2021-03-31 15:16:47 · 104 阅读 · 0 评论 -
设计模式(7)单例模式
单例模式简介单例模式,在全局中,仅可以有一个单利模式的类实例,并提供了一个全局访问点来访问这个唯一实例。可以看出,单利模式的特点有这个类只能有一个实例必须自己创建这个实例必须自己向整个系统提供这个实例单例模式结构单例模式结构非常简单,只包含一个类,即单例类。为防止创建多个对象,其构造函数必须是私有的。另一方面,为了提供一个全局访问点来访问该唯一实例,单例类提供了一个公有方法getInstance来返回该实例。...原创 2021-03-31 10:00:12 · 73 阅读 · 0 评论 -
设计模式(6)原型模式
原型模式原型模式的思路是,通过复制一个已有对象来获取一个或者多个相同或者相似的对象。原型模式的工作原理是将一个原型对象传给要发动创建的对象------客户端,客户端通过请求原型对象复制本身来实现创建过程。按照工厂方式的思路去理解,就是创建的新工厂对象就是原型类自己。软件系统中有些对象的创建过程比较复杂,且有时需要频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的意图所在。原型模式结构原型式的结构包含以下几个角色:原创 2021-03-25 16:39:36 · 80 阅读 · 0 评论 -
设计模式(5)建造者模式
建造者模式建造者模式将客户端与包含多个部件的复杂对象的创建进行了分离,客户端不必知道复杂对象的内部组成与方式,只需要知道所需建造者就行了。换个通俗的方式来说,盖房子的时候开发商将希望盖得房子的设计图给了施工方,施工方按照自己公司设计的施工流程去打地基,盖房子,进行内部装修等,开发商只需要联系好有资质的施工方就行了,其他的交给施工方去施工,施工方会按照开发商的设计图,去建造出不同的风格的房子。建造者模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式结构建造原创 2021-03-24 14:41:42 · 71 阅读 · 0 评论 -
设计模式(4)抽象工厂模式
抽象工厂模式之前看到的两个设计模式,都存在各自的缺陷,简单工厂模式中,一个工厂生产多个产品,根据客户提供的产品名称创建对应的产品实例;工厂方法设计模式,则在简单工厂模式的工厂上,创建了许多个工厂类,根据客户提供的产品名称选择可以生产对应产品的工厂进行生产。然而,很多时候,一个工厂生产的产品并不单一,而是生产一类产品,比如,一个工厂,可以生产足球、篮球、排球等多种产品,把相关的产品归纳为一个“产品族”,由同一个工厂来生产,这就是抽象工厂模式。抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无原创 2021-03-23 18:31:20 · 77 阅读 · 0 评论 -
设计模式(3)工厂方法模式
工厂方法模式简介简单工厂模式中,每新增一个具体产品,就需要修改工厂类内部的判断逻辑。为了不修改工厂类,遵循开闭原则,工厂方法模式中不再使用工厂类统一创建所有的具体产品,而是针对不同的产品设计了不同的工厂,每一个工厂只生产特定的产品。工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式结构从工厂方法模式简介中,可以知道该模式有以下几种角色:抽象工厂(AbstractFactory):所有生产具体产品的工厂类的基类,提供工厂原创 2021-03-19 16:37:53 · 110 阅读 · 0 评论 -
设计模式(2)简单工厂模式
简单工厂模式创建型模式关注对象的创建过程,在软件开发中应用非常广泛。创建型模式描述如何将对象的创建和使用分离,让用户在使用对象过程中无须关心对象的创建细节,从而降低系统耦合度,并且让系统易于修改和扩展。简单工厂模式是最简单的设计模式之一,但应用也十分频繁,同时也是其余创建模式的基础,因此有必要先学习简单工厂模式。简单工厂模式基本实现流程由上述例子,可以很容易总结出简单工厂的实现流程:设计一个抽象产品类,它包含一些公共方法的实现;从抽象产品类中派生出多个具体产品类,如篮球类、足球类、排球类,具体原创 2021-03-19 14:27:25 · 127 阅读 · 0 评论 -
设计模式(1)概述
这段时间在看设计模式的东西,拜读了一些大神的文章,现在仅仅做个记录,奉上大神原链接https://zhuanlan.zhihu.com/p/94877789设计模式介绍设计模式一般包含模式名称、问题、目的、解决方案、效果等要素:模式名称(Pattern Name):通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的;问题(Problem):描述应该在何时使用模式,包含了设计中存在的问题以及问题存在的原因;解决.原创 2021-03-19 11:31:01 · 117 阅读 · 0 评论