`

行为类模式大PK(总结)

阅读更多

行为类模式包括责任链模式命令模式解释器模式、迭代器模式、中介者模式备忘录模式观察者模式状态模式策略模式模板方法访问者模式,我去,好多。。。下面主要挑选几个比较容易混淆且比较重要的模式进行对比说明。

 

 

一、命令模式VS策略模式

1、关注点不同

策略模式关注的是算法替换的问题:一个新的算法投产,旧算法退休,或者提供多种算法由调用者自己选择使用,算法的自由更替是它实现的要点。换句话说,策略模式关注的是算法的完整性、封装性,只有具备了这两个条件才能保证其可以自由切换。

命令模式则关注的是解耦问题,如何让请求者和执行者解耦是它需要首先解决的,解耦的要求就是把请求的内容封装为一个一个的命令,由接收者执行。由于封装成了命令,就同时可以对命令进行多种处理,例如摊销、记录等。

 

2、角色功能不同

策略模式中的具体算法是负责一个完整算法逻辑,它是不可再拆分的原子业务单元,一旦变更就是对算法整体的变更。

命令模式傲游命令的实现,也就是功能的实现。例如我们在分支中也提到接收者的变更问题,它只影响到命令族的变更,对请求者没有任何影响,从这方面来说,接收者对命令负责,而与请求者无关,命令模式中的接收者只要符合六大设计原则,完全不用关心它是否完成了一个具体逻辑,它的影响范围也仅仅是抽象命令和具体命令,对它的修改不会扩散到模式外的模块。当然,如果在命令模式中需要指定接收者,则需要考虑接收者的变化和封装。

 

3、使用场景不同

策略模式适用于算法要求变换的场景,而命令模式适用于解耦两个有紧耦合关系的对象场合或者多命令多撤销的场景。

 

 

 

二、策略模式VS状态模式

1、环境角色的职责不同

 两者都有一个叫Context环境角色的类,但是两者的区别很大,策略模式的环境角色只是一个委托作用,负责算法的替换;而状态模式的环境角色不权权是委托行为,它还具体登记状态变化的功能,与具体的状态类协作,共同完成状态切换行为随之切换的任务。

 

2、解决问题的重点不同

策略模式旨在解决内部算法如何改变的问题,也就是将内部算法的改变对外界的影响降低到最小程序,它保证的是算法可以自由地切换;而状态模式旨在解决内在状态的改变而引起行为改变的问题,它的出发点是事物的状态,封装状态而暴露行为,一个对象的状态改变,从外界来看就好像是行为改变。

 

3、解决问题的方法不同

策略模式只是确保算法可以自由切换,但是什么时候用什么算法它决定不了;而状态模式对外暴露的是行为,状态的变化一般是由环境角色和具体状态共同变化的,也就是说状态模式封装了状态的变化而暴露了不同的行为或行为结果。

 

4、应用场景不同

策略模式只是一个算法的封装,可以是一个有意义的对象,也可以是一个无意义的逻辑片段,比如MD5加密算法。其算法必须是平行的,可以相互替换,否则策略模式就封装了一堆垃圾。状态模式则要深圳市一系列状态发生变化的场景,它要求的是有状态且有行为的场景,也就是一个对象必须具有二维(状态和行为)描述才能采用状态模式,如果只有状态而没有行为,则状态的变化就失去了意义。

 

5、复杂度不同

从设计模式的角度分析,通常策略模式比较简单,这里的简单指的是结构简单,扩展比较容易,而且代码也容易阅读。而状态模式则通常比较复杂,因为它要从两个角色看到一个对象状态和行为的改变,也就是说它封装的是变化,要知道变化是无穷尽的,因此相对来说状态模式通常都比较复杂,涉及面很多,虽然也很容易扩展,但是一般不会进行大规模的扩张和修正。

 

 

 

三、观察者模式VS责任链模式

这两个好像没什么相似的?观察者模式中一个具体的角色既可以是观察者,也可以是被观察者,这样就形成了观察者链。这与责任链模式非常类似,它们都实现了事务的链条化处理。

1、链中的消息对象不同

 从首节点开始到最终的尾节点,两个链中传递的消息对象是不同的。责任链模式基本上不改变消息对象的结构,虽然每个节点都可以参与消费,但是它的结构不会改变。但是在观察者模式中是允许的,链中传递的对象可以自由变化,只要上下级节点对传递对象了解即可,它不要求链中的消息对象不可变化 ,它只要求链中相邻两个节点的消息对象固定。

 

2、上下节点的关系不同

在责任链模式中,上下节点没有关系,都是接收同样的对象,所有传递的对象都是链首传递过来,上一节点是什么没有关系,只要按照自己的逻辑处理就成,而观察者模式就不同了,它的上下级关系很亲密,下级对上级顶礼膜拜,上级对下级绝对信任,链中的任意两个相邻节点都是一个牢固的独立团体。

 

3、消息的分销渠道不同

在责任链模式中,一个消息从链首传递进来后,就开始沿着链条向链尾运动,方向是单一的、固定的;而观察者模式则不同,有非常大的灵活性,一个消息传递到链首后,具体怎么传递是不固定的,可以以广播方式传递,也可以以跳跃方式传递,这取决于处理消息的逻辑。

 

3
2
分享到:
评论

相关推荐

    游戏化竞争对在线学习用户行为的影响研究_陈国青1

    因此,本研究特别强调了理解用户自愿参与时游戏化设计如何发挥作用的重要性,以确保研究结果能够真实反映用户在自然状态下的行为模式。 总结来说,游戏化竞争策略在在线学习中的应用已被证明能够有效提高用户粘性和...

    Head First_设计模式(中文版)pdf

    15. **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。 16. **职责链模式**:避免向对象的发送者和接收者硬编码消息的接收者。发送者只发送消息,不关心谁处理;接收者只负责处理...

    社群电商PK平台电商:两大阵营六个样本,各自的朝圣路!资料.pdf

    在两大阵营的较量中,没有一方可以轻易获胜,关键在于谁能更好地满足消费者需求,提供更有价值的服务,同时创新商业模式以适应不断变化的市场环境。 总结来说,社群电商与平台电商的对决揭示了电子商务行业的动态...

    社交电商三季报PK 有赞蘑菇街云集如涵谁最强.zip

    总结来看,社交电商三季报的PK,不仅是数字上的较量,更是商业模式和创新能力的比拼。通过对有赞、蘑菇街、云集和如涵的深度分析,我们可以洞悉社交电商领域的竞争态势,为投资者、从业者乃至消费者提供有价值的见解...

    欧博案例分享-如何通过优化PMC模式提升生产效率.doc

    【欧博案例分享-如何通过优化PMC模式提升...总结来说,优化PMC模式对于提升生产效率至关重要。通过解决内部管理问题,明确责任分配,改革激励机制,沃德科技有望实现生产流程的高效化和规范化,从而提高整体竞争力。

    教导模式一模块心得PPT学习教案.pptx

    通过对PPT的分析,我们可以总结出以下几个重要的知识点: 1. 教导模式的核心思想:以人为本,以人的成长为核心,注重心灵与思想的管理,并以教育为手段。领导者都是导师,他们需要具备导师的素质和能力。 2. 四大...

    HBase Schema Design

    HBase是一种分布式的、可扩展...总结而言,HBase模式设计需充分利用其面向列的存储模型和灵活的行键设计,来优化特定应用场景下的数据读写性能。在设计时,还应考虑数据模型的复杂性和维护成本,以实现最优的系统性能。

    游戏智能编程AI及算法

    它不仅能帮助AI角色通过学习玩家的行为模式来调整自身策略,还能让游戏的难度随着玩家的技能水平动态调整。此外,在游戏画面的处理上,神经网络算法也发挥着关键作用,比如在动态光照和纹理处理上的应用,大大增强了...

    某科技游戏策划培训(PPT64页).pptx

    《传奇》的成功在很大程度上归因于引入了玩家间的竞争概念,即"PK"系统,它改变了玩家的行为模式。中国网络游戏用户更倾向于在游戏中寻求即时回报,如装备、等级、人脉、地位等,这些因素构成了玩家的"即得利益"。...

    2021-2022年收藏的精品资料省级标杆班组候选推荐表.doc

    总结来说,这个班组通过构建严谨的责任体系、创新工作模式、提升成员能力、设置激励措施和强化团队精神,成功打造了一个高效、协同、富有活力的标杆班组。这些实践对其他企业班组的建设具有借鉴意义。

    某科技游戏策划培训.pptx

    PK系统强调了结果导向的游戏体验,与中国玩家倾向于追求即时利益的行为相吻合。在中国市场,网络游戏与单机游戏的最大区别在于,网络游戏更注重结果,玩家在游戏中的投入往往带有明显的商业色彩,如装备、等级、人脉...

    全国营销中心-火山小视频营销通案-4-92页.pdf

    以下是基于提供的信息所总结的几个关键知识点: 1. **短视频市场的增长与潜力**:数据显示,从2017年9月至2018年9月,短视频行业的同比增长达到了2倍,显示出短视频市场的巨大潜力。火山小视频作为其中的一员,具有...

    使用UML的数据库分析与设计PPT学习教案.pptx

    - 例如,学生信息表(STUDENTS)和课程信息表(COURSES)可以用类表示,其中包含主键(PK)和属性(如学号Sno、姓名Sname等)。 4. 关键字与索引的概念 - 候选关键字:一组属性,唯一确定表中记录,最小化属性集...

    基于python的Django框架学生信息管理系统.zip

    例如,`/students/`可能对应`student_list`视图,`/students/<int:pk>/`对应`student_detail`视图,其中`pk`是学生的唯一标识。 5. **forms.py**: 可能包含了表单类,如`StudentForm`,用于用户输入学生信息的验证...

    小学教师工作述职报告.doc.doc

    例如,我开展了小组竞赛活动,通过“小组pk”的形式,鼓励学生之间积极竞争,不仅提高了课堂的活跃度,也增强了学生的学习动机。同时,我及时给予表扬和奖励,对学生的点滴进步给予肯定,进一步增强了他们的自信心和...

    软件设计1

    首先,数据库设计主要关注两个方面:结构特性设计(数据库模式或数据结构)和行为特性设计(应用程序和事务处理)。UML作为一种强大的建模工具,能够将这两者结合起来,使得系统设计更为统一。数据模型是构建数据库...

    阿里搜推实验基于 JSONB 列式存储的降本提效实践.pptx

    通过将数据结构与查询模式更好地匹配,JSONB列式存储优化使得阿里搜推能够更有效地处理大规模的实时分析任务,提高了系统的响应速度和用户体验。 总结来说,阿里搜推通过引入JSONB列式存储,优化了数据模型,提升了...

    03039 职业化头脑风暴会--新员工培训(PPT 62页).ppt

    5. **竞争环境分析**:在大背景部分,提到了中国企业和就业市场的严峻状况,如企业平均寿命短、大学毕业生就业压力大等。这旨在让员工意识到激烈的竞争环境,鼓励他们不断提升自我,以适应快速变化的市场。 6. **...

    家居店面精细化管理.doc

    这包括明确的人事架构(设架构、定岗位、清职责、做培训、正行为),有效沟通(避免争论,情感先行,沟通修炼),以及培养快乐执行力(制度设计,薪酬激励,员工心理需求满足)。 2. **培训与教导**:采用OJT(On ...

    营销创意中心-抖音广告三段论-2019.6-29页.pdf

    总结来说,抖音广告三段论强调的是内容创新、用户互动和挑战赛的运用,这三个步骤相辅相成,共同构建了一种高效的营销模式。通过这种方式,品牌能够有效地触达目标受众,激发用户参与,从而实现更广泛的品牌传播和...

Global site tag (gtag.js) - Google Analytics