设计模式中命令模式和迭代器模式的区别、对比
发布网友
发布时间:2022-04-22 13:56
我来回答
共1个回答
热心网友
时间:2022-04-19 02:09
这两个设计模式区别应该很大呀..
为什么会分不清呢.
先看基本定义:
命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)
迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示
一个最基本的区别.
迭代器类似你已经有了一个函数数组,
然后你按照顺序从0到正无穷的这么去遍历.
而命令
请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。
这么来说吧.命令虽然可以进行一组命令组合,然后实现一堆的事情但他毕竟是某一个具体请求的响应根据协议去组合.
而迭代是我这一组就是一组.一个一个网下执行..
说道这里我似乎明白了您为什么分不清了.
是否是迭代也是一组函数.命令也可以是一组函数呢?
那反过来想.你调用一个接口这接口就给你返回一个Helloword
没有任何操作.
他看似可以是一个迭代器亦可以是一个命令.
但问题是.迭代器是不包含返回这个过程的哦.
他描述的仅仅是执行的过程.
也就是说.
如果说带上了返回二字他可以被称作命令而非迭代了.
迭代一般来说指的是内部的调用逻辑.
而命令则包含了整体的调用逻辑.
从参与者就能看出对应的细节
迭代器:
Iterator(迭代器)
迭代器定义访问和遍历元素的接口
ConcreteIterator (具体迭代器)
具体迭代器实现迭代器接口
对该聚合遍历时跟踪当前位置
Aggregate (聚合)
聚合定义创建相应迭代器对象的接口
ConcreteAggregate (具体聚合)
具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例
命令:
Command:
定义命令的接口,声明执行的方法。
ConcreteCommand:
命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
Receiver:
接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
Invoker:
要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
Client:
创建具体的命令对象,并且设置命令对象的接收者。注意这个不是我们常规意义上的客户端,而是在组装命令对象和接收者,或许,把这个Client称为装配者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行。