/*第二章行为参数化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