1 namespace DesignModel.模板方法模式 2 { 3 4 abstract class Introduce 5 { 6 /// <summary> 7 /// 模板方法,给出逻辑的骨架,是一些抽象行为组成,实现推迟到子类。 8 /// </summary> 9 public void SayHello() 10 { 11 Name(); 12 Department(); 13 Age(); 14 } 15 /// <summary> 16 /// 抽象行为1 放到子类去实现 17 /// </summary> 18 public abstract void Name(); 19 /// <summary> 20 /// 抽象行为2 21 /// </summary> 22 public abstract void Department(); 23 /// <summary> 24 /// 女员工可以选择隐藏自己的年龄,所以设定为虚方法吧 25 /// </summary> 26 internal protected virtual void Age() 27 { 28 Console.WriteLine(""); 29 } 30 } 31 32 /// <summary> 33 /// 子类提供顶级逻辑的具体不同实现 34 /// </summary> 35 class XliuIntroduce : Introduce 36 { 37 public override void Department() 38 { 39 Console.WriteLine("挨踢部"); 40 } 41 42 public override void Name() 43 { 44 Console.WriteLine("小牛"); 45 } 46 47 internal protected override void Age() 48 { 49 Console.WriteLine("26"); 50 } 51 } 52 class RossIntroduce : Introduce 53 { 54 public override void Department() 55 { 56 Console.WriteLine("客户部"); 57 } 58 59 public override void Name() 60 { 61 Console.WriteLine("Ross"); 62 } 63 } 64 } 65 static void 模板方法模式() 66 { 67 Introduce introduce = new XliuIntroduce(); 68 introduce.SayHello(); 69 introduce = new RossIntroduce(); 70 introduce.SayHello(); 71 }
模板方法模式:抽象类定义顶级抽象逻辑,一个业务的“模板”,通过多态,子类去实现自己的业务算法。把不变行为搬移到超类,去除子类中的重复代码。当不变的和可变的行为在子类实现中出现就需要考虑使用该模式。