首页 > 其他分享 >13命令与迭代器模式

13命令与迭代器模式

时间:2023-04-24 21:38:08浏览次数:38  
标签:13 遍历 聚合 请求 迭代 对象 模式

行为型模式(Behavioral Pattern)

  • 定义:关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责

    1. 行为型模式:不仅仅关注类和对象本身,还重点关注它们之间的相互作用和职责划分
  • 分类

    1. 类行为型模式:使用继承关系在几个类之间分配行为,主要通过多态等方式来分配父类与子类的职责
    2. 对象行为型模式:使用对象的关联关系来分配行为,主要通过对象关联等方式来分配两个或多个类的职责

Pasted image 20230403085306


命令模式

  • 定义:将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

    1. 对象行为型模式
    2. 别名为动作(Action)模式或事务(Transaction)模式
    3. “用不同的请求对客户进行参数化”
    4. “对请求排队”
    5. “记录请求日志”
    6. “支持可撤销操作”
  • 简单结构:4个角色

    1. Command(抽象命令类)
    2. ConcreteCommand(具体命令类)
    3. Invoker(调用者)
    4. Receiver(接收者)
  • UML
    Pasted image 20230403085609

  • 优缺点

    1. 优点:
      • 降低系统的耦合度
      • 新的命令可以很容易地加入到系统中,符合开闭原则
      • 可以比较容易地设计一个命令队列
      • 为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案
    2. 缺点:
      • 使用命令模式可能会导致某些系统有过多的具体命令类(针对每一个对请求接收者的调用操作都需要设计一个具体命令类)
  • 适用环境

    1. 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互
    2. 系统需要在不同的时间指定请求、将请求排队和执行请求
    3. 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作
    4. 系统需要将一组操作组合在一起形成宏命令

迭代器模式

  • 定义:提供一种方法顺序访问一个聚合对象中各个元素,且不用暴露该对象的内部表示。

    1. 对象行为型模式
    2. 又名游标(Cursor)模式
    3. 通过引入迭代器,客户端无须了解聚合对象的内部结构即可实现对聚合对象中成员的遍历,还可以根据需要很方便地增加新的遍历方式
  • 简单结构:4个角色

    1. Iterator(抽象迭代器)
    2. ConcreteIterator(具体迭代器)
    3. Aggregate(抽象聚合类)
    4. ConcreteAggregate(具体聚合类)
  • UML
    Pasted image 20230403090214

  • 优缺点

    1. 优点
      • 支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式
      • 简化了聚合类
      • 由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,符合开闭原则
    2. 缺点
      • 在增加新的聚合类时需要对应地增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
      • 抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展。在自定义迭代器时,创建一个考虑全面的抽象迭代器并不是一件很容易的事情
  • 适用环境

    1. 访问一个聚合对象的内容而无须暴露它的内部表示
    2. 需要为一个聚合对象提供多种遍历方式
    3. 为遍历不同的聚合结构提供一个统一的接口,在该接口的实现类中为不同的聚合结构提供不同的遍历方式,而客户端可以一致性地操作该接口

标签:13,遍历,聚合,请求,迭代,对象,模式
From: https://www.cnblogs.com/vbig-2021/p/17350916.html

相关文章

  • Rust语言 学习17 模式匹配
    一、模式基本概念二、模式可辩驳性三、模式语法......
  • [AHK]打开同花顺委托下单窗口在同花顺(v8.60.13) 试验可用
    DetectHiddenWindows,onSetTitleMatchMode,Fast;主程序IfWinExist,ahk_class#32770ahk_exexiadan.exe ToolTip,找到下单窗口else{ open_xiadan() loop{ Sleep,1000 ifA_index>20 { MsgBox下单窗口呼叫失败 break } }UntilWinExist(ahk_class......
  • [oeasy]python0139_尝试捕获异常_ try_except_traceback
    尝试捕获异常回忆上次内容变量相加整型数字变量可以相加字符串变量也可以拼接但是字符串和整型数字整型数字和字符串不能相加怎么办?转格式int("1")str(2)可是如果输入的苹果数量是字符串"abc"int("abc")会发生什么??......
  • ahk模式窗口
    OwnDialogs:命令Gui+OwnDialogs可以指定窗体上的每个线程(例如ButtonOK子过程)为子窗体,可以使窗体上激活的如MsgBox,InputBox,FileSelectFile,和FileSelectFolder 对话框为当前窗体的子窗体。这些对话框都为模式对话框,也就是说用户必须先关闭这些对话框才能和他们的父窗......
  • 建民の每日打卡13
    一、问题描述 二、流程设计1.将数据存入数组2.当不满足“所有人一样多”的条件时,通过循环对数组中的每个元素进行判断并处理3.满足条件后输出结果三、流程图设计 四、代码实现#include<iostream>usingnamespacestd;intjudge(intc[]){ inti; for(i=0;i<10;i++) if......
  • [oeasy]python0139_尝试捕获异常_ try_except_traceback
                               -不但要有自己的报错-还要保留系统的报错-有可能吗?​###保留报错​![图片描述](https://doc.shiyanlou.com/courses/uid......
  • 【Oracle】year must be between -4713 and +9999,and not be 0
    【Oracle】yearmustbebetween-4713and+9999,andnotbe0yearmustbebetween-4713and+9999,andnotbe0出现问题的时候一般是to_date的地方有问题,很有可能是有字符串或者空格在数据中过滤掉就行......
  • collection-集合迭代
    1.关于集合迭代/遍历注意:以下讲解的遍历方式/迭代方式是所有Collection拥有的一种方式在Map集合中不能使用,在所有Collection及子类中使用创建集合对象 对collection集合进行遍历/迭代1.获取集合对象迭代器Iterator Iterator中有三个......
  • 设计模式结合使用的例子
    设计模式(Designpattern)是一套被反复使用的、为众人所知的分类编目的代码设计经验总结。使用设计模式是为了可重用和扩展代码,增加代码的逻辑性和可靠性。设计模式的出现使代码的编制真正工程化,成为软件工程的基石。设计模式结合使用的例子今天我们就......
  • 适配器模式
    适配器模式定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。解决问题:已经存在类似功能的类或接口,但是方法签名不一样。适用性:*你想使用一个已经存在的类,而它的接......