【问题标题】:Difference between Template Method Pattern and using Abstract (base) classes?模板方法模式和使用抽象(基)类之间的区别?
【发布时间】:2012-04-16 10:20:54
【问题描述】:

经过几个小时的(重新)搜索,我只是想不出普通抽象类和使用模板模式之间的可解释区别。

我唯一看到的是: 使用抽象类时,您需要实现所有方法。但是在使用模板方法时,您只需要实现这两个抽象方法即可。

有人可以向我解释一下模板模式的(dis?)优点以及模板模式和抽象类之间的主要区别。

附言我只是想更好地了解这一点,以便我自己的理解/学习

编辑: 谢谢你的快速反应!但我会更好地解释它(因为它已经走对了:))。我知道什么是抽象类! (以及必须实现哪些方法的类!),并且我知道模板模式的基本思想(一种在类中定义的过程算法的骨架?)。我有点困惑,因为它们看起来很像!另外我不是英语,所以我有可能监督一些事情!提前THNX

【问题讨论】:

    标签: class abstract template-method-pattern


    【解决方案1】:

    就像你说的,模板是一种模式。抽象类是一种特定于语言的构造,可用于实现模板。一些语言(例如 Python 或 JavaScript)没有抽象类的概念,但这并不意味着你不能在它们中实现模板,只是你必须使用不同的合约。

    在语言中提供抽象类的一个优点是,您可以在编译时强制执行所需的模板方法(合同)。在 JavaScript 之类的语言中,不能强制执行合同,只能通过约定/文档来指定。

    【讨论】:

    • 所以本质区别是:使用模板模式,您可以/必须实例化基类,并且您没有抽象类,但只有几个可以在子类中唯一实现的抽象方法?
    • 没有本质区别,因为它们本质上是不同的概念,无法直接比较。这就像问出租车和奔驰有什么区别。有使用梅赛德斯的出租车,但也有使用菲亚特、甚至人力车或船只的出租车。在 Java 中,模板模式可以实现为抽象类。但不一定是这样。例如,很多 Spring Framework 的 Template 类都是非抽象类。但是当它们是抽象的时,它们必须遵循java的抽象类规则(即实现所有方法或保留'abstract'关键字)。
    • 但是这两种实现都可以有一些优势吗?我明白你的意思了!抽象类可以“强制”模板方法模式实现,对吗?但它不必是抽象类。另一个(逻辑)区别是,抽象(类)是一种构造,而模板是一种模式
    【解决方案2】:

    抽象类是实现模板模式的一种方式。但这不是它的唯一用途。

    把模板模式想象成抽象类的一个子集。这应该可以消除您的疑问。

    由于缺少更好的词,从技术上讲,没有区别。不同之处在于我们使用它的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2011-06-12
      相关资源
      最近更新 更多