模板方法模式

  模板方法模式是把不变行为搬到超类,从而去除子类的重复代码。至于需要变动的行为,通过多态,在子类中覆盖掉超类的同名方法。

这种方法其实是最常用的oo方法,我们经常会这样来设计超类和子类。问题是,我们在前面讲过,子类必须能完全代替父类,要倒转依赖。如果在子类中重载超类同名方法,不是违背了这个原则吗?在看《大话设计模式》的时候,我有这个疑问。不过,从他举的例子来看,也的确有道理。模板方法中的超类和子类虽然是继承关系,事实上却不是真正意义上的继承。在鸟和企鹅的例子中,鸟充当的是父类的角色,企鹅属于鸟,同时会对鸟进行扩展。但考卷这个例子中,超类充当的不是父类,允当的是模板,子类和父类完全一样,没有扩展,只有分数那个地方有个重载。

也就是说,如果超类充当的是模板的角色,就适合用重载。如果超类充当的是父类的角色,那么就不要用重载了,不宜维护,这个时候就应该选择策略模式或者工厂模式来抽出需要重载的方法。

话说回来了,既然模板方法模式只是需要修改小部分的内容,并不会扩展,为什么不通过给构造函数传参来实例化不同的对象呢?这样不是更简单吗?
原文地址:https://www.cnblogs.com/cly84920/p/4427099.html