|
|
1
24
访问者、策略和模板模式都包含算法的应用。最大的区别在于它们是如何被唤起的,以及如何在实践中被使用。虽然看起来它们有相同的用例,但是看看对象的构造可以看出不同。 当我们不能将函数作为一类对象传递时,通常使用策略模式。它需要一个非常具体的参数列表,并且在其调用模式中只需要该参数列表。例如:
然后将其应用于“Foo”类型的对象列表。我们真的没有其他方法可以将其应用于任何其他对象。 另一方面,当我们想将一个算法应用于一堆可能不共享相同签名或具有相同成员函数的对象时,则使用visitor模式。我们之所以说visitor模式,是因为它经常用于遍历树或其他“不相关”对象的集合(在继承意义上是不相关的)
在这里,我们的想法是,我们想“起来”所有这些物体。它们都不共享同一成员函数签名,但在概念上都是相关的。因此,我们可以“访问”这些类中的每一个,但希望算法执行相同类型的任务。 通过使用visitor模式,我们可以避免将每个类包装成代理模式。因此,对于N个类,我们希望将此算法应用于我们不需要生成N个代理类。我们只需要向visitor类添加N个方法。 模板方法与访问者和策略模式都有很大不同。对于模板,您要做的是在层次结构中的不同子类上强制执行相同类型的算法。例如:
因此,算法的结果在继承人中是不同的。 |
|
|
2
1
共性:
差异:
看一看 Template method , Strategy 和 Visitor 和 Sourcemaking 更好的理解文章。 相关职位: When should I use the Visitor Design Pattern? |