Template Pattern
问题:
许多含有相同步骤 但又细节不用的类
所以:
讲相同的步骤 抽象为基类, 子类覆盖那些细节不同的方法
public abstract Base() { void Start() { A(); B(); C(); } void A() { Console.WriteLine("A"); } abstract void B(); void C() { Console.WriteLine("C"); } } |
||
public class ChildA : Base { override void B() { Console.WriteLine("ChildA.B"); } } |
public class ChildB : Base { override void B() { Console.WriteLine("ChildB.B"); } } |
public class ChildC : Base { override void B() { Console.WriteLine("ChildC.B"); } } |
问题:
假设某些基类不需要其中的某些步骤
所以:
使用 "钩子" 方法, 钩子 (可以返回bool) 来决定是否在基类中实现
public abstract Base() { void Start() { A(); B(); if(hook()) { C(); } } void A() { Console.WriteLine("A"); } abstract void B(); void C() { Console.WriteLine("C"); } bool hook() { return true; } } |
|
public class ChildA : Base { override void B() { Console.WriteLine("ChildA.B"); } override bool hook() { return false; } } |
public class ChildB : Base { override void B() { Console.WriteLine("ChildB.B"); } } |