【大话设计模式】——行为型模式之“拟人化模式”

2024-06-13 14:58

本文主要是介绍【大话设计模式】——行为型模式之“拟人化模式”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

继续接着上回行为型模式,我们再说说它的拟人化模型——观察者模式,状态模式,解释器模式和策略模式。从

四个设计模式的名称上即可知道他们拥有同人一样的观察能力,心理状态,遇到问题获得解释策略的能力。下

面我们从他们四个具体的性质来说明一下他们是怎么“拟人化”的。

观察者模式——打小报告

呵呵,我给观察者起了一个小外号——打小报告的人。从书上的例子知道,那个前台秘书就是个打小报告的人。

来看看观察者模式的定义:它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。这个主

对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

它的结果图如下:

在结构图中,前台秘书就是ConcreteObserver,她把大Boss的最新状态提供给员工知道。

而观察者模式主要用于当一个对象的改变需要同时改变其他对象,且不知道具体有多少对象需要改变的时候。还

有它可以将两个具有依赖关系的对象封装在独立的对象中使它们各自独立地改变和复用。它的主要工作就是在解耦,

让耦合的双方都依赖于抽象而不是具体。

观察者缺点:虽然观察者的目标是解耦,但是它还是依赖于观察者这个具体对象(改:依赖于抽象观察者),所

以还是有一定的弊端。所以 我们引出了 委托

委托就是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用

可以像其他任何方法一样,具有参数和返回值。委托可以看作是对函数的抽象,是函数的“类”,委托的实例将代表

一个具体的函数。也就是书上说的:本来在“老板”类中的增加和减少的抽象观察者集合记忆通知时遍历的抽象观察

者都不必要了。只要在客户端多委托搭载几个方法就解决了!

状态模式——情绪化

它的定义是:当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类。它主要解决的是当

控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可

以把复杂的判断逻辑简化。

它的结构图如下:

根据状态模式的结构图和定义我们可以知道,这就是一个人的基本心理活动状态,所以可以用情绪化来理解这个

模式。书上的实例为工作一天中随时间的心理状态,从早上、中午、下午、晚上每个时间段员工的工作状态。

状态模式的目的是为了消除庞大的条件分支语句,通过把各种状态转移逻辑分布到State子类间,减少相互间的

依赖。

什么时候使用状态模式?当一个对象的行为取决于它的状态,并且必须在运行时刻根据状态改变行为时,就可以

用状态模式了。像员工加班的状态很不好,效率不高,这种时候就可以减少加班的时间,尽量在工作时间内完成工作

任务。

解释器模式——还是翻译

记得在结构型模式中提到的适配器模式讲到翻译的作用,这里的解释器也具有翻译作用,来看看他们有什么不同

的地方吧!

来看看解释器模式的定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表

示来解释语言中的句子。

在对比一下看看适配器模式的定义:将一个类的接口转换成客户希望的另一个接口。它使得原本由于接口不兼容

而不能一起工作的那些 类可以一起工作。

从定义中能够看出他们的基本原理都是相同的,通过接口,使目标对象明白想要表达的意思。不过也能看出不同

点:解释器模式主要是解释语言文法表示来解决问题;而适配器主要解决的是对象与对象间的一种兼容性问题。

再看看解释器模式的结构图:

解释器的好处是:当有一个语言需要解释执行,它可以将该语言中的句子表示为一个抽象语法树。这样就很容易

地改变和扩展文法。

它的不足:解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法可能难以管理和维

护。建议当文法非常复杂时,使用其他的技术如语法分析程序或编译器生成器来处理。

策略模式——商场促销

策略模式主要定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使

用算法的客户。

它的结构图如下:


策略模式是一种定义了一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不

同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。而策略模式的Strategy类层

次为Context定义了一系列的可供重用的算法或行为。而ConcreteStrategy继承有助于析取出这些算法中的公共功

能。

策略模式的优点是简化了一个单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。它就是用

来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则。所以即使需求发生变化,变动也会很

小。


总结


上述是行为型模式中的“拟人化模式”的简单介绍。总结来说,他们就是把人的情绪演绎的淋漓尽致,拥有和人

一样的情绪。这样的总结让我觉得是比较轻松的,终于知道什么叫联系生活了,因为所有的设计都是出自人,都是以

人的需求为目标。所以这样想的话,联系就很好找了。马上就要进入自考学习了,希望第二次自考,不慌乱,慢慢

来,不就是联系吗!!!

这篇关于【大话设计模式】——行为型模式之“拟人化模式”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057630

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

Builder模式的实现

概念 在创建复杂对象时,将创建该对象的工作交给一个建造者,这个建造者就是一个Builder。在日常的开发中,常常看到,如下这些代码: AlertDialog的实现 AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setMessage("你好建造者");builder.setTitle

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。

《分析模式》“鸦脚”表示法起源,Everest、Barker和Hay

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》这本书里面用的并不是UML表示法。作者Martin Fowler在书中也说了,该书写于1994-1995年,当时还没有UML。作者在书中用的是一种常被人称为“鸦脚”的表示法。  有的同学会有误解,例如有同学发表以下感想: “鸦脚”表示法当然不是Fowler先使用的。F

[最全]设计模式实战(一)UML六大原则

UML类图 UML类图是学习设计模式的基础,学习设计模式,主要关注六种关系。即:继承、实现、组合、聚合、依赖和关联。 UML类图基本用法 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。eg:大雁是最能飞的,它实现了飞翔接口。 关联关系用实线箭头来表示。当一个类"知道"另一个类时,可以用关联。eg:企鹅需要"知道"气候的变化,需要"了解"气候规律。 聚合关

设计模式学习之中介者模式

我们平时写代码的过程,一个类必然会与其他类产生依赖关系,如果这种依赖关系如网状般错综复杂,那么必然会影响我们的代码逻辑以及执行效率,适当地使用中介者模式可以对这种依赖关系进行解耦使逻辑结构清晰,本篇博客,我们就一起学习中介者模式。 定义及使用场景 定义:中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使它们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其