zoukankan      html  css  js  c++  java
  • 设计模式大总结(二)

    版权声明:本文为博主原创文章。转载请注明出处:http://blog.csdn.net/zhangzijiejiayou https://blog.csdn.net/zhangzijiejiayou/article/details/33292579

        上篇博客给大家介绍了六大原则和设计模式之间的关系,以及创建型模式和结构型模式

    http://blog.csdn.net/zhangzijiejiayou/article/details/32712779)。

    本文将给大家介绍行为型模式。

    行为型模式

        是对在不同的对象之间划分职责和算法的抽象化。




        观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都得到

    通知并被自己主动更新。

        长处:在解耦合,让耦合的两方都依赖于抽象的接口而不是详细,从而使各自的变化都不会影响还有一边的变化。

    依赖倒转原则的最佳体现。

        缺点:抽象观察者的接口的任务过于繁重。运用时要把握好这个尺度。

     

        模板方法:定义一个操作算法骨架,而将一些步骤延迟到子类中,模板方法使得子类能够不改变一个算法的结构

    就可以又一次定义该算法的某些特定步骤。

        长处:提供了一个非常好的代码复用的平台。非常好地体现了开放封闭原则和里氏代换原则。

        缺点:算法骨架不easy升级

        模板方法能够用桥接模式模拟实现

     

        命令模式:将一个请求封装为一个对象,从而使你可用不同的的请求对客户进行參数化;能够对请求排队或记录

    请求日志。以及支持可撤销的操作。

        长处:将调用操作的对象和知道怎样实现该操作的对象解耦

        缺点:用来运行操作的接口的任务比較繁重。

     

        状态模式:同意一个对象在其内部状态改变时改变它的行为。让对象看起来似乎改动了它的类。

        长处:与特定状态相关的行为局部化。而且将不同状态的行为切割开来,状态模式通过把各种状态转移逻辑分布

    State的子类之间。来减少相互间的依赖

        状态模式和策略模式在模式结构图上基本上是一样的

     

        职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成

    一条链,并沿着这条链传递该请求。直到有一个对象处理它为止。

        长处:接收者和发送者都没有对方明白的消息。且链中的对象自己也并不知道链的结构。减少了耦合度。

        缺点:一个请求极有可能到了链的末端都得不到处理。或者由于没有正确配置而得不到处理。


        职责链和命令模式都能够将请求的发送者和接收站之间解耦合,但运行方式不同。

     

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

    的句子。

        长处:easy改变和扩展文法。由于该模式使用类来表示文法法则,能够使用继承来改变或扩展文法。也比較easy

    实现文法,由于定义抽象语法树中各个节点的类的实现大题相似,这些类都易于直接编写。

        缺点:包括很多规则的文法可能难以管理和维护。

    建议当文法非常复杂时,使用其它的技术如语法分析程序或编

    译生成器来处理。

     

        中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个对象不须要显示地相互引用。从而使其耦

    合松散。而且能够独立地改变他们之间的交互。

        长处:减少了类之间的耦合,关注的对象从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更

    宏观的角度去看待系统。

        缺点:交互复杂性变为中介者的复杂性

     

        訪问者模式:表示一个作用于某对象结构中的各元素的操作。它使你能够再不改变各元素的类的前提下定义作用

    于这些元素的新操作。

        长处:数据结构和作用于结构上的操作之间的耦合度减少

        缺点:添加新的数据结构变得困难。

     

        策略模式:定义一系列的算法。把它们一个个封装起来,而且使它们能够相互替换。本模式使得算法可独立于使

    用它的客户变化。

        长处:定义了一系列的可重用的算法或行为,继承有助于析取这些算法中的公共功能。

    简化了单元測试。

        缺点:并没有解除client须要须要推断的压力。

     

        策略模式和简单工厂模式结合能够大大减轻client的职责。

     

        桥接模式和策略模式

        同样:某些情况下,能够使用桥接模式来模拟实现策略模式的功能。

        不同:最基本的是模式的目的不一样,策略模式的目的是封装一系列的算法。使得这些算法能够相互替换;而桥

    接模式的目的是分离抽象部分和实现部分。使得它们能够独立地变化。

     

        备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态。并在该对象之外保存这个状态。这样可将该

    对象恢复到原先保存的状态。

        长处:可将该对象恢复到原先保存的状态。

        缺点:假设状态数据非常大非常多。会非常消耗内存

     

        命令模式和备忘录模式结合能够使用备忘录模式来存储可撤销操作的状态。

     

        迭代器模式:提供一种方法顺序訪问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

        长处:为遍历不同的聚集结构提供如開始、下一个、是否结束、当前那一项等统一接口。分离了集合对象的遍历

    行为,抽象出一个迭代器类来负责,这样既能够不暴露集合内部结构。又可让外部代码透明地訪问集合内部的数据。

     

    个人小结:

        仅仅要真正深入地理解了设计原则。非常多设计事实上就是原则的而已,也许在不知不觉中就在使用设计模式了。

    亦或

    我们能够再依据设计模式的基本原则设计出更好的更有用的模式来。

    就像《倚天屠龙记》中张无忌练习武当派武功的

    最高境地就是“全忘记”。事实上设计模式的最高境地也是这样,应用于无形其中。


查看全文
  • 相关阅读:
    PHP 数组函数分类整理
    mysql 数据库中 int(3) 和 int(11) 有区别么???
    理解PHP的运行机制
    类与对象
    PHP函数补完:call_user_func()
    linux 软件安装目录详解
    Linux下安装Redis
    Redis简介,应用场景,优势
    idea自动抽取变量快捷键设置
    全局捕获异常(适用于SpringMvc,SpringBoot项目)
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10488705.html
  • Copyright © 2011-2022 走看看