zoukankan      html  css  js  c++  java
  • 模板方法模式

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

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

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

    话说回来了,既然模板方法模式只是需要修改小部分的内容,并不会扩展,为什么不通过给构造函数传参来实例化不同的对象呢?这样不是更简单吗?
  • 相关阅读:
    残缺的字符串
    [BZOJ3513: [MUTC2013]idiots]
    FFT感性瞎扯
    Quartz框架简介
    异常状态码总结
    【SSM】拦截器的原理、实现
    FastDFS实现文件上传下载实战
    分布式文件系统FastDFS设计原理(转)
    FastDFS简介
    【设计模式】观察者模式
  • 原文地址:https://www.cnblogs.com/cly84920/p/4427098.html
Copyright © 2011-2022 走看看