2012-04-02 60 views
1

经过几个小时(重新)搜索,我不能拿出一个正常的抽象类和使用模板模式之间的可解释的区别。模板方法模式与使用抽象(基类)类的区别?

我唯一看到的是: 同时使用一个抽象类,你都需要实现的所有方法。但是在使用模板方法的时候,你只需要实现那些抽象方法。

有人可以向我解释模板模式的优点和模板模式与抽象类的主要区别。

p.s.我只是想知道这更好的了我自己的理解/学习

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

回答

2

就像你说的,Template是一种模式。抽象类是可用于实现模板的语言特定结构。某些语言(例如Python或JavaScript)没有抽象类的概念,但这并不意味着您无法在其中实现Template,只是必须使用不同的合约。具有在语言提供抽象类的

一个好处是,你可以再强制执行在编译时所需的模板方法(合同)。在像JavaScript这样的语言中,合同不能执行,只能通过约定/文档来指定。

+0

所以本质区别是:使用模板模式,您可以/必须实例化基类,您没有抽象类,但只有几个抽象方法可以在子类中唯一实现? – Dominique 2012-04-02 21:05:33

+1

没有本质区别,因为它们根本不同,不能直接比较的概念。这就像问一辆出租车和一辆梅赛德斯的区别。有些出租车使用奔驰,但有些出租车使用菲亚特,甚至人力车或小船。在Java中,模板模式可以作为抽象类来实现。但它不一定是。例如,许多Spring框架的模板类都是非抽象类。但是当它们是抽象的时候,它们必须遵循Java的抽象类规则(即实现所有方法或保留“抽象”关键字)。 – 2012-04-02 22:31:59

+0

但是两种实现都可以具有某种优势吗?我明白你的意思了!抽象类可以“强制”模板方法模式的实现,对吧?但它不一定是一个抽象类。其他(逻辑的)区别是,Abstract(类)是一个构造,Template是一个模式 – Dominique 2012-04-03 07:06:07

0

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

想象一下模板模式作为抽象类的一个子集。这应该清除你的疑问。

对于缺少一个更好的词,从技术上讲,没有区别。区别在于我们使用它的方式。