可能我没说清楚,想说的意思是,子类不直接override
generateIconAndFormatStyledText方法。而是在父类里调用其它方法,子类override其它发放。
比如每个子类的override方法里基本上做了两件事
1. Formatxxx
2. Return ICON_xxx
父类的generateIconAndFormatStyledText调用formatText(),然后return getIcon()。子类中override这两个方法即可。
再进一步,对于ICON_xxx的返回值,可以改成父类中的一个成员变量,构造时传入。这样只要在实例化每个子类是传入对应常量值,子类只需要override formatText一个方法。
也许还可以继续重构,把Formatxxx方法改为方法对象,大致上等于
Formatxxx(a,b,c) => new xxxFormatter(a, b, c).exec();
如果在定义各子类时a,b,c等参数已经可以确定,那么Formatter实例就可以产生了。这样一来,子类不需要override formatText方法。
因而只需要一个类,在实例化中传入Formatter和ICON常量即可。