[HITSC] 2021期末复习-第十一章(下)

本文详细介绍了三种行为设计模式:策略模式、模板模式和迭代器模式,以及访问者模式的应用场景。策略模式允许算法整体替换,以适应不同版本的需求;模板模式则关注多个方法的选择与切换,常用于框架实现;迭代器模式提供了一种遍历聚合对象的方式,不暴露其内部结构;访问者模式则为抽象数据类型预留扩展功能,保持内部不变性的同时,允许外部添加操作。这四种模式都是为了提高软件的可复用性和可维护性。
摘要由CSDN通过智能技术生成

CHAPTER 11(下) 面向可复用性和可维护性的设计模式

11.3 行为模式

11.3.1 Strategy

11.3.1.1 应用环境

--算法整体替换

--理解:当某个方法需要在多个版本间更替

--调用时委托,动态传入客户端倾向的算法类实例,类似于python将函数作为参数传递

--用户类直接在方法里传一下Strategy接口即可,类之间耦合很松散

11.3.1.2 优势

11.3.1.3 劣势

\

11.3.2 模板模式 Template Method

11.3.2.1 应用场景

--区别于策略模式调用单个方法,模板模式涉及多个方法的选择与切换。这里介绍的模板模式是根据用户的不同而编写不同的模板实现类,将产生差异的方法写死进实现类里。如果结合策略模式,在模板类(抽象)里传入每一个不同方法集合的接口,则可产生更多变化,更加类似于装饰器。

--在父类声明通用逻辑,采用继承 + Override实现算法不同部分。区别于策略模式:采用委托实现算法调用(接口 + 多态)。

--在框架中应用广泛,用于实现算法不变性,并由客户端提供每一步的具体实现。

11.3.3 迭代器模式 Iterator

--模式归纳如下:

--抽象迭代器类定义遍历协议。

--每个聚合类的具体迭代器子类。

--聚合实例创建迭代器对象的实例。

--聚合实例保留对迭代器对象的引用。

11.3.3.1 Iterator接口

--要求实现该接口的集合对象可迭代。

--该接口要求自己的集合类实现接口(实现迭代器Iterator)以进行显示或隐式的迭代遍历。

11.3.4 访问者模式 Visitor

11.3.4.1 应用场景

--为ADT预留一个类似于接口的可扩展功能的方法,可通过委托等机制,在将来不改变ADT内部代码的情况下得到新的功能组合。

--有点像策略模式(?

--功能类构造比较常规,接口声明用于接收外界Visitor接口的实现类的方法,但visitor接口内对于功能接口的不同实现类多态地声明了多个visit函数。

//了解对象数组的这种声明方式

11.3.4.2 行为模式比较

-- Visitor vs Iterator

--迭代器以遍历的方式访问集合数据,而无需暴露其内部表示,将“遍历”这项功能delegate到外部的iterator对象。

--观察者模式在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活扩展/改变visitor的操作算法,而不影响ADT,维护了OCT。

-- Strategy vs visitor

--都通过委托建立功能对象与ADT的动态联系

--Visitor强调ADT内部不变性,通过外部定义,对ADT执行某项操作,客户端把visitor作为功能对象,将它传入ADT,利用其内部功能方法的多态性对不同实现的ADT执行操作。

--Strategy强调ADT内部对某些待实现功能的相应算法的灵活替换。这些算法被ADT委托到外部的Strategy类上。

--按照PPT总结:visitor是站在外部client的角度,灵活增加对ADT的各种不同操作,strategy则是站在内部ADT的角度,灵活变化对其内部功能的不同配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值