《研磨设计模式》读书笔记之:命令模式、迭代器模式

前言:本篇系看完《研磨设计模式》一书的个人理解和总结,可能存在不正确的地方,看时需要持怀疑态度。另外,所有的图都是示意图,示意,示。

命令模式(Commad):

几点解释:

  1. 命令模式中分为三个角色:Invoker、Commad、Receiver。客户端调用Invoker,Invoker持有Commad对象并转调其对应方法,而Commad持有Receiver对象并转调其对应方法。因此这三层之间可以灵活的组合使用。
  2. 简化的命令模式,可以让Commad对象实现具体的功能,不同的Commad实现对应了不同的命令。Invoker可以不持有Commad对象,而是通过传参的方式来获得一个Commad对象。再进一步,传入Commad参数时可以使用匿名内部类的方式传入,类似于Java的回调模式。
  3. 上面说了命令模式可以退化为Java的回调实现,而回调方式是实现模板方法模式的一种方式,也即命令模式可以实现类似模板方法模式的功能:在Invoker中固定对应的算法骨架,需要子类参与的步骤通过传参来获得。
  4. 本质:将请求封装为一个个的命令。以命令对象为单位之后,实现日志、撤销、队列等功能就很容易。
  5. 多个命令可以组合为一个宏命令,类似组合模式。很容易联想到事务的实现,事务对应了一组命令,执行完一个命令,就从待执行日志中删除对应命令,并生成一个反操作放入 UndoLog中,当发生错误需要回滚时,就执行对应的UndoLog的对应的反操作就实现了回滚。

迭代器模式(Iterator):

几点解释:

  1. 迭代器模式要解决的问题是 对于多个内部实现不同的容器,给出一种统一的方式来访问容器内的元素。
  2. 之前是客户端直接访问容器对象,对不同的容器需要用不同的方式访问。现在,迭代器屏蔽了访问不同容器的差异,并对外提供了统一的访问方式,也就是把对不同容器的访问工作抽离封装到了迭代器中。
  3. 因为迭代器需要访问到容器中的元素,比较合适的方式即 将迭代器的具体实现作为容器类的一个 私有内部类,私有内部类会持有外部类实例的一个引用,然后在容器类中提供一个共有方法来返回对应的迭代器的实例即可。
  4. 本质:提供不同容器的一种通用的访问方式,也可以做一些访问控制。
  5. 和观察者模式一样,Java中也提供了迭代器模式的实现,大量的容器也都支持迭代器模式。
  6. 如果想要在迭代的同时进行元素的删除,可以使用容器的迭代器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值