设计模式 <行为型> | 模版模式
模版模式(Template Method)
模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。
算法可以理解为业务逻辑,并不特指数据结构和算法中的算法。这里的算法骨架就是模板,包含算法骨架的方法就是模板方法,这也是模板方法模式名字的由来。
结构图:
角色:
- 抽象类(AbstractClass): 定义模版算法,以及依次调用它们的实际模板方法。 算法步骤可以被声明为抽象类型,也可以提供一些默认实现。
- 具体类(ConcreteClass):可以重写所有步骤, 但不能重写模板方法。
适用场景:
- 需要根据环境来决定执行业务时。
优点:
- 把算法可变的各个部分分发到子类中,提高了算法的扩展性。
- 把算法不算的部分放在基类中,符合开闭原则。
缺点:
- 如果基类修改所有子类都需要修改。
代码(C#)
1 |
|
最后
模板模式有两大作用,复用和扩展。其中,复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。
同步回调跟模板模式几乎一致。它们都是在一个大的算法骨架中,自由替换其中的某个步骤,起到代码复用和扩展的目的。而异步回调跟模板模式有较大差别,更像是观察者模式。
回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系,模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。
设计模式 <行为型> | 模版模式
http://example.com/posts/37900.html