策略模式的扩展

本文探讨了在使用策略模式时如何避免类型爆炸问题,通过将抽象方法封装到独立接口,将抽象类转化为具体工具类,减少子类型数量。同时,介绍了将策略作为函数接口以利用Java 8的lambda表达式,实现行为参数化,以应对无限可能的场景。文中还提到了命令模式与Runnable接口的应用。
摘要由CSDN通过智能技术生成

/*第二章行为参数化2.2模板方法模式2.2.2

在2.2模板方法模式中,插入本节。直接用Sum为例,不需要搞新例子。*/

在Sum设计中,需要注意的问题是:抽象方法item(intx) 有无穷多或者足够多的实现方式;而且存在2个抽象方法的组合

--------------------------------------------------------

道生一,一生二,二生三,三生万物。多次使用策略模式需要考虑两个问题:组合爆炸和无限可能。

单纯地使用如Netbeans的重构-提取接口是不够的,我们需要将提取的接口由父类型(is_a)修改成使用关系。

 

1. 避免类型爆炸

 

抽象类型Sum(或Context)有两个抽象方法——next()与item (),如果两个抽象方法分别有m和n种实现,则Sum因为方法实现的任意组合,将导致它可以有m*n个子类型。也就是说,方法实现的任意组合将导致Sum的子类型数量急剧膨胀。

为了避免类型(数量)的爆炸,需要对Sum进行如下步骤的重构。

(1)以INext和IItem分别封装next ()和item ()。显然,不可设计如下Sum的类层次,

public abstract class Sum implements INext, IItem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值