![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
Strive--顾
一日之计在于晨,一生之计在于勤。
展开
-
策略模式
策略模式是定义一种一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。结构图:下面是根据上一篇简单工厂模式中的例子使用了策略模式后的代码:#include using namespace std; class Operation //定义一个算法类(作原创 2017-05-23 23:43:50 · 259 阅读 · 0 评论 -
模板方法模式
模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类。模板方法模式使得子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤。 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过原创 2017-06-02 22:52:03 · 430 阅读 · 0 评论 -
组合模式
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。 组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。原创 2017-06-29 22:51:50 · 282 阅读 · 0 评论 -
迭代器模式
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 下面是迭代器模式的结构图: (1)Iterator(迭代器):迭代器定义访问和遍历元素的接口(2)ConcreteIterator (具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置(3)Aggregate (原创 2017-06-30 19:44:53 · 244 阅读 · 0 评论 -
建造者模式
建造者模式即将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的结构图如下:实用范围:1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2 当构造过程必须允许被构造的对象有不同表示时。 下面是利用建造者模式实现画出不同类型的人的代码,更加直观的体现出建造者模式的特点:原创 2017-06-09 17:14:20 · 228 阅读 · 0 评论 -
状态模式
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 状态模式的结构图如下: 状态模式的适用场合:(1) 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状原创 2017-06-22 21:35:25 · 223 阅读 · 0 评论 -
观察者模式
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 观察者模式的结构图如下:原创 2017-06-11 13:11:03 · 268 阅读 · 0 评论 -
适配器模式
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 基本信息: 共有两类适配器模式:(1)对象适配器模式 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。当客户原创 2017-06-24 09:56:40 · 252 阅读 · 0 评论 -
备忘录模式
备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式的结构图如下: 1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento原创 2017-06-25 23:05:44 · 343 阅读 · 0 评论 -
外观模式
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。外观模式实现了子系统与客户端之间的松耦合关系。客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。 外观模式的结构图:外观模式的主要应用场合:(1)在设计初期阶段,应该要有意识的将不同的两个层分离,原创 2017-06-06 17:43:24 · 418 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这原创 2017-06-15 22:52:18 · 279 阅读 · 0 评论 -
单一职责原则
今天看完单一职责原则后,收获不少,简单的说一下吧,单一职责原则强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则。关于单一职责原则,其核心的思想是:一个类最好只做一件事,只有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起了,一个职责的变化可能会削弱或抑制这个类完成其他职责的原创 2017-05-24 18:54:55 · 350 阅读 · 0 评论 -
开放封闭原则
开放封闭原则对于扩展是开放的,对于修改是封闭的。所谓开放封闭原则就是软件实体应该对外扩展开发,而对修改封闭。开放封闭原则是所有面向对象原则的核心,软件设计本身所追求的目标就是封装变化,降低耦合,而开放封闭原则正是对着原创 2017-05-25 15:30:04 · 463 阅读 · 0 评论 -
设计模式六大原则
单一职责原则(Single Responsibility Principle)定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责转载 2017-05-26 22:31:18 · 249 阅读 · 0 评论 -
装饰模式
装饰模式即为在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 主要特点为:(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。(2) 装饰对象包含一个真实对象的引用(reference)(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发原创 2017-05-28 16:41:06 · 265 阅读 · 0 评论 -
代理模式
今天看了代理模式,一开始还在想代码怎么能代理,看完之后,让我不得不佩服语言的丰富与奇妙,又学到了新的知识。代理模式的定义即为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的模式结构为:一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理对象实现同一个接口,先原创 2017-05-29 22:30:03 · 232 阅读 · 0 评论 -
工厂方法模式
工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂,具体工厂,抽象产品和具体产品。 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户端原创 2017-05-30 17:04:06 · 454 阅读 · 0 评论 -
简单工厂模式
这些天开始看设计模式这本书,起初对于设计模式是陌生的更加不知其有什么作用,但看了第一章后就已经让我受益匪浅了,让我对代码的编写有了新的认识,不再是枯燥乏味,而更多的是一门艺术的体现。现在倘若让你利用C++,Java,C#或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得出结果。我相信这对绝大多数有编程语言底子的人来说不是问题。一个main函数,在终端显示输原创 2017-05-19 14:52:43 · 343 阅读 · 0 评论 -
原型模式(浅复制和深复制)
原型模式即用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。 结构图如下:原创 2017-05-31 15:16:30 · 476 阅读 · 0 评论 -
单例模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一原创 2017-09-17 10:40:35 · 279 阅读 · 0 评论