图解设计模式
一绘
你有没有在中午看到一束阳光恰好从窗外照射进来?原来好似根本不存在的尘埃,在光下忽然清晰的毫发毕现。那个时候我就在想,是不是我对你的关心也如同这尘埃,如非那一瞬间的偶然,你永远也不会看到,它其实是如此强地无声的翻涌着,且无处不在。
展开
-
Observer (观察者) 模式
17.1 Observer模式 Observer 的意思是 “进行观察的嗯”,也就是 “观察者” 的意思。 在 Observer 模式中,当观察对象的状态发生变化时,会通知观察者。Observer 模式适用于根据对象状态进行相应处理的场景。17.2 示例程序 这是一段简单的示例程序,观测者将观察一个会生成数值的对象,并将它生成的数值结果显示出来。不过,不同的观测者的显示方式不一样。DigitObserver 会以数字形式显示数值,而 GraphObserver 则会以简单的图示形式来显示数值。原创 2020-09-08 14:49:50 · 1416 阅读 · 0 评论 -
Mediator(仲裁者)模式
16.1 Mediator 模式 大家想象一下一个乱糟糟的开发小组的工作状态。小组中的 10 个成员虽然一起协同工作,但是意见难以统一,总是互相指挥,导致工作进度始终滞后。他们还都十分在意编码细节,经常为此争执不下。这时,我们就需要一个中立的仲裁者站出来说:“各位,请大家将情况报告给我,我来负责仲裁。我会从团队整体出发进行考虑,然后下达指示。但我不会评价大家的工作细节。” 这样,当出现争执时大...原创 2020-01-08 14:54:07 · 985 阅读 · 0 评论 -
Facade (外观)模式
15.1 Facade 模式 程序总是会变得越来越大。随着时间的推移,程序中的类会越来越多,而且它们之间相互关联,这会导致程序结构也会变得越来越复杂。我们在使用这些类之前,必须先弄清楚它们之间的关系,注意正确的调用顺序。 不过与其这么做,不如为这个大型程序准备一个“窗口”。这样,我们就不必单独地关注每个类了,只需简单地对 “窗口” 提出请求即可。 使用 Facade 模式可以为互相关联...原创 2019-12-31 10:31:09 · 424 阅读 · 0 评论 -
Chain of Responsibility (责任链)模式
(一段时间没更新了,坚持了100天考研^^)14.1 Chain of Responsibility (责任链)模式 “推卸责任” 有贬义的意思,但是有时候也需要 “推卸责任”的情况。例如,当外部请求程序进行某个处理,但程序暂时无法之间决定由哪个对象负责处理时,就需要推卸责任。这种情况下,我们可以考虑将多个对象组成一条责任链,然后按照他们在责任链上的顺序一个个地找出到底谁来负责处理。 这...原创 2019-12-25 10:25:45 · 447 阅读 · 0 评论 -
Visitor(访问者) 模式
13.1 Visitor 模式 在数据结构中保存着许多元素,我们会对元素进行 “处理”。这时, “处理” 代码放在哪里比较好呢?通常的做法是将它们放在表示数据结构的类中。但是,如果 “处理” 有许多种呢?这种情况下,每当增加一种处理,我们就不得不去修改表示数据结构的类。 在 Visitor 模式中,数据结构与处理被分离开来。我们编写一个表示 “访问者” 的类来访问数据结构中的元素,并把对各...原创 2019-08-25 20:39:42 · 1128 阅读 · 0 评论 -
Decorator(装饰器) 模式
12.1 Decorator 模式 假如有一块蛋糕,如果只涂上奶油,其他什么也不加,就是奶油蛋糕。如果加上草莓,就是草莓奶油蛋糕。如果再加上一块黑色巧克力板,上面用白色巧克力写上姓名,然后插上蜡烛,就变成了一块生日蛋糕。 不论是蛋糕、奶油蛋糕、草莓奶油蛋糕,他们的核心都是蛋糕。不过,经过一系列装饰后,蛋糕的味道变得更加甜美了,目的也变得更加明确了。 程序中的对象与蛋糕十分相似。首先有一...原创 2019-08-11 16:10:10 · 470 阅读 · 0 评论 -
Composite(容器与内容一致性)模式
11.1 Composite 模式 在计算机的文件系统中,有“文件夹”的概念。文件夹里面既可以放入文件,也可以放入其他文件夹(子文件夹)。以此类推,文件夹是形成了一种容器结构、递归结构。 虽然文件夹与文件是不同类型的对象,但是它们都“可以被放入到文件夹中”。文件夹和文件有时也被称为“目录条目”。在目录条目中,文件夹和文件被当作是同一种对象看待(即一致性)。 有时,与将文件夹和文件都作为...原创 2019-07-21 16:16:49 · 863 阅读 · 0 评论 -
Bridge (桥梁)模式
9.1 Bridge 模式 Bridge 的意思是 “桥梁”。就像在现实中,桥梁的功能是将河流的两侧连接起来一样,Bridge 模式的作用也是将两样东西连接起来,它们分别是 类的功能层次结构 和 类的实现层次结构。 Bridge 模式的作用是在 “类的功能层次结构” 和 “类的实现层次结构” 之间搭建桥梁。|| 类的层次结构的两个作用 ◆ 希望增加新功能时 假设现在有一个类 So...原创 2019-06-30 20:21:35 · 2989 阅读 · 0 评论 -
Strategy (策略)模式
10.1 策略模式 Strategy 的意思是 “策略”,指的是与敌军对垒时行军作战的方法。在编程中,我们可以将其理解为 “算法”。 无论什么程序,其目的都是解决问题。而为了解决问题,我们需要编写特定的算法。使用 Stratety 模式可以整体地替换算法的实现部分。能够整体地替换算法,能让我们轻松地以不同的算法去解决同一个问题,这种模式就是 Stratety 模式。10.2 示例程序 ...原创 2019-07-13 19:55:05 · 688 阅读 · 0 评论 -
Abstract Factory(抽象工厂) 模式
8.1 Abstract Factory 模式 通常,我们不会将 “抽象的” 这个词与 “工厂” 这个词联系到一起。所谓工厂,就是将零件组装成产品的地方,这是一项具体的工作。大在 Abstract Factory 模式中,不仅有 “抽象工厂” ,还有 “抽象零件” 和 “抽象产品” 。抽象工厂的工作是将 “抽象零件” 组装为 “抽象产品”。 在面向对象的编程中 “抽象” 这个词的具体含义指...原创 2019-06-15 13:03:57 · 1244 阅读 · 0 评论 -
Builder (建造者)模式
7.1 Builder 模式 在建造大楼时,需要先打牢地基,搭建框架,然后自下而上地一层层盖起来。通常,在建造这种具有复杂结构的物体时,很难一气呵成。我们需要首先建造组成这个物体的各个部分,然后分阶段将它们组装起来。 这里,我们将要学习用于组装具有复杂结构的实例的 Builder 模式。7.2 示例程序 作用:使用 Builder 模式编写 “文档” 的程序,具有以下结构。含有一...原创 2019-05-26 13:36:37 · 1473 阅读 · 0 评论 -
Prototype (原型)模式
6.1 Prototype 模式 通常,我们使用 new 方式来生成类的实例。 new Something(); 像这样 new 的方式来生成实例时,是必须指定类名的。但是,有时也需要 “不指定类名的前提下生成实例” 的需求。 (1) 对象种类繁多,无法将他们整合到一个类中时 此时需要要编写多个类文件来处理。 (2) 难以根据类生成实例时 生成实例的过程太过复杂,很难根...原创 2019-05-25 17:42:44 · 2357 阅读 · 0 评论 -
Singleton(单例) 模式
5.1 Singleton 模式 程序在运行时,通常会生成很多实例。但是,当我们想在程序中表示某个东西只会存在一个时,就会有 “只创建一个实例” 的需求。 当然,只要我们在编写程序时多加注意,确保只调用了一次 new MyClass(),就可以达到值生成一个实例的目的。当如果要达到以下目的:确保任何情况下都绝对只有1个实例想在程序上表现出“只存在一个实例” 像这样的确保只生成一...原创 2019-05-12 15:47:56 · 241 阅读 · 0 评论 -
FactoryMethod (工厂方法) 模式
4.1 Factory Method 模式 在 Template Method 模式中,我们在父类中规定处理的流程,在子类中实现具体的处理。如果我们将该模式用于生成实例,它就演变为这里我们将学习的 Factroy Method 模式。 Factory 有 “工厂” 的意思。用 Template Method 模式来构建生成实例的工厂,这就是 Factory Method 模式。在该模式中,...原创 2019-05-11 13:08:44 · 629 阅读 · 0 评论 -
Adapter (设配器)模式
2.1 Adapter 模式 如果想让额定工作电压是直流12伏特的笔记本电脑在交流 100 伏特的 AC 电源下工作,通常我们会使用 AC 适配器,将家庭用的 100 伏特电压转换成我们需要的直流 12 伏特电压。这就是适配器的工作,它位于实际情况与需求之间,填补两者之间的差异。适配器的英文是 Adapter,“使…互相适合的东西”。 在程序世界中,经常会存在现有的程序无法直接使用,需要做...原创 2019-04-14 12:37:20 · 362 阅读 · 0 评论 -
Template-Method (模板方法) 模式
3.1 Template Method 模式|| 什么是模板 模板的原意是指带有镂空文字的薄薄的塑料板。只要用笔在模板的镂空处进行临摹,即使是手写也能写出整齐的文字。虽然只要看到镂空的洞,就可以指定能写出哪些文字,但具体写出的文字是什么感觉则依赖于所用的笔。如果是签字笔,则写出签字似的文字;如果是彩色笔,则可以写出彩色的字。但无论什么笔,文字的形状都会与模板上镂空处的形状一致。|| 什么是...原创 2019-04-21 21:19:04 · 407 阅读 · 0 评论 -
《图解设计模式》-各章节的划分/学习设计模式之前
《图解设计模式》中各章节的划分与 GoF 的分类不同,详情如下:第1部分“适应设计模式”,比较容易理解的设计模式 Iterator(迭代器)模式 Adapter(适配器)模式第2部分“交给子类”,与类继承相关的设计模式 Template Method(模板方法)模式 Factory Method(工程方法)模式第3部分“生成实例”,与生成实例相关的设计模式 Singleton(单...原创 2019-03-22 17:00:59 · 284 阅读 · 0 评论 -
Iterator (迭代器)模式
1.1 Iterator 模式 Iterator 模式用于在数据集合中按照顺序遍历集合。单词 Iterate 有反复做某件事情的医生,汉语称为“迭代器”。1.2 示例程序 作用:将书放置到书架(BookShelf)上,并将书的名字按顺序显示出来。Iterator 示例程序类图...原创 2019-03-24 19:05:06 · 355 阅读 · 0 评论