zoukankan      html  css  js  c++  java
  • 【读书笔记】设计模式第五章:行为模式

    本文主要分析了模板方法模式、命令模式、责任链模式、策略模式、迭代器模式。介绍它们的定义、优缺点、使用场景,以及实例代码。

    为了深刻地理解设计模式,最重要的还是动手编写代码。


    我參照书中的例程又一次构想了一些更加生动、易于理解的样例,希望大家喜欢。
    代码能够通过下面链接进行浏览:

    这些代码都经过编译执行,保证没有错误。


    • 模板方法
      • 定义
        • 定义一个操作中的算法框架,而将一些步骤延迟到子类中
        • 角色:抽象模板、详细模板
      • 长处
        • 封装不变的部分。扩展可变的部分
        • 提取公共部分的代码。便于维护
        • 行为由父类控制、子类实现
      • 使用场景
        • 多个子类有公共方法时,而且逻辑结构基本同样
        • 能够把重要的算法作为模板方法。把细节由子类实现
        • 重构时模板方法是一个常常使用的模式,将同样的代码抽取到父类
    • 命令模式
      • 定义
        • 又称动作模式、事务模式
        • 将一个请求封装成一个对象,从而让你把不同的请求把client參数化。对请求排队,或者记录请求日志
        • 角色:命令角色、详细命令、调用者角色、接受者角色
      • 长处
        • 类间解耦合
        • 可扩展
        • 命令结合其它模式会更加优秀
      • 缺点
        • 项目中出现过多详细的命令类
      • 使用场景
        • 能够用于实现回调函数
        • 须要将请求排队
        • 须要将请求记录到日志
        • 须要支持事务
    • 责任链模式
      • 定义
        • 使多个对象都有机会处理请求。从而避免了发送者和接受者的耦合。

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

        • 角色:抽象处理者、详细处理者
      • 长处
        • 将发送者和处理者分开。请求者不须要知道谁来处理。发送者不须要知道请求者是谁
        • 提高系统灵活性
      • 缺点
        • 减少系统性能
        • 不方便调试
      • 使用场景
        • 一个请求须要一系列处理工作
        • 业务流程处理,比方审批
        • 对系统进行补充扩展
    • 策略模式
      • 定义
        • 也叫政策模式
        • 定义一组算法。将每一个算法封装起来。而且使它们之间能够相互转换
        • 角色:环境、抽象策略、详细策略
      • 长处
        • 能够管理一组相关的算法
        • 能够替换继承
        • 能够避免使用多重条件转移语句
      • 缺点
        • client必须知道全部的策略类
        • 会造成非常多策略类,能够使用享元模式解决
      • 应用场景
        • 多个类仅仅是在算法上不一样
        • 算法须要自由切换
        • 须要屏蔽算法规则的场景
    • 迭代器
      • 定义
        • 提供一种方法訪问一个容器中的各个对象,而又不暴露该对象的内部细节
        • 角色:抽象迭代器、详细迭代器、抽象聚类、详细聚类
      • 长处
        • 简化了訪问容器元素的操作。具备了一个统一的遍历接口
        • 封装遍历算法,使算法独立于聚类角色
      • 缺点
        • 让人产生序列化的错觉,从而产生错误
        • 元素都是Object类型,没有类型特征(泛化能够解决这个问题)
      • 应用场景
        • Java集合框架中被广泛应用
        • Java中一般不须要手动编写迭代器,JDK它配备了已经受够了

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    SpringSecurity 3.2入门(8)自定义权限控制数据库设计
    SpringSecurity 3.2入门(7)自定义权限控制介绍
    SpringSecurity 3.2入门(6)简单介绍默认使用的十一个过滤器
    Spring3.2下使用JavaMailSenderImpl类发送邮件
    Java Mail邮件发送的简单实现
    Spring下配置几种常用连接池
    23种设计模式入门之工厂模式
    C# BackgroundWorker的Bug???
    C# BeginInvoke和EndInvoke方法
    c# 高效的线程安全队列ConcurrentQueue
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4801146.html
Copyright © 2011-2022 走看看