1.基类对象的public方法,若该方法的流程稳定(各实现步骤顺序固定),但是其中某些步骤(protect方法)是动态的(根据不同的泛化对象不同),考虑使用Template Pattern。
2.稳定的步骤在基类实现,动态的步骤写为virtual或者pure virtual,在不同的泛化子类去实现。
3.结合工厂方法,客户在使用基类对象指针可以多态的实现public方法,并且不知道具体是哪种子类。
4.如有新的动态步骤需要增加,基类不需要修改,新增加继承子类即可。注意也需要相应修改工厂类
5.Template封装的不变的是稳定的方法流程,并且方法流程中有稳定的步骤;多态的步骤让不同子类实现。
6.若整个方法的流程也不固定,则考虑使用Strategy pattern,将该方法作为一个抽象类(如果有一些相对固定的步骤,可以在抽象类内写成protect方法,子类实现不同的动态步骤,但是整个方法需要重写),或者接口(完全没有固定的步骤,方法在子类实现)。
7.一个方法如果需要很多的if else(或者Switch),并且条件判断不是对修改封闭的,则考虑使用Strategy Pattern;结合工厂方法生成不同的策略。
8.Strategy一般只针对个别方法(根据类自己的方法数量来考量,一般不超过3个),太多需要重写的方法则考虑继承的静态方式去实现,因为2个类差异比较大。