模板方法是最常见的设计模式之一,几乎可以在所有的抽象类中找到。

意图
定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构既可以重新定义该算法的某些特定步骤。这里需要复用的是算法的结构,即步骤,步骤地实现可以在子类中完成。

结构
第三十三章 模板方法模式(Template Method)

模板方法很简单,也很常见,这里就不对其结构、使用场合和实现进行详细描述了。

采用委托方法实现模板方法
模板方法中的关键是在父类中的非抽象方法中调用抽象方法,子类之间的区别仅仅是实现方法的不同。在.NET中,我们可以使用委托技术来实现与模板方法相同的目的。

定义一个委托:
public delegate float Comp(float a, float b);

声明抽象的方法,在具体的方法中调用这个方法:

第三十三章 模板方法模式(Template Method)using System;
第三十三章 模板方法模式(Template Method)
using System.Collections.Generic;
第三十三章 模板方法模式(Template Method)
using System.Text;
第三十三章 模板方法模式(Template Method)
第三十三章 模板方法模式(Template Method)
namespace TemplateMethod.ex33_6


在另一个类中定义与委托相同的方法,这个类可以与TemplateMethod无关,只要其中方法的接口与代理相同即可:

第三十三章 模板方法模式(Template Method)using System;
第三十三章 模板方法模式(Template Method)
using System.Collections.Generic;
第三十三章 模板方法模式(Template Method)
using System.Text;
第三十三章 模板方法模式(Template Method)
第三十三章 模板方法模式(Template Method)
namespace TemplateMethod.ex33_6


使用这种方法可以实现模板方法相同的意图,并且更为灵活。在子类中实现不同方法的情况下,这种方法是一种更好的选择。但是如果在方法中涉及到对象的状态,这种方法则不适合。

相关文章:

  • 2021-08-24
  • 2021-10-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-24
  • 2021-05-10
  • 2021-10-11
  • 2021-12-29
  • 2021-07-03
相关资源
相似解决方案