行为型设计模式——模板方法模式

定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

适用于

①一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

②各子类中公共的行为应被提取出来并集中到一个公共父类中,以避免代码重复。

③控制子类扩展。模板方法旨在特定点调用“hook”操作(默认的行为,子类可以在必要时进行重定义扩展),这就只允许在这些点进行扩展。

类图如下

 

1     internal class Program
2     {
3         static void Main(string[] args)
4         {
5             AbstractClass cl = new ConcreteClass();
6 
7             cl.TemplateMethod();
8         }
9     }
 1     /// <summary>
 2     /// 抽象类,模板方法类,定义具体流程
 3     /// </summary>
 4     internal abstract class AbstractClass
 5     {
 6         public void TemplateMethod()
 7         {
 8             Step1();
 9             Step2WithHook();
10             Step3();
11         }
12         // 抽象方法(子类必须实现)
13         public abstract void Step1();
14         // 钩子方法(可选覆盖)
15         public virtual void Step2WithHook()
16         {
17             Console.WriteLine("默认步骤2");
18         }
19         // 具体方法(固定逻辑)
20         private void Step3()
21         {
22             Console.WriteLine("固定步骤3");
23         }
24     }
View Code
 1     /// <summary>
 2     /// 具体实现类
 3     /// </summary>
 4     internal class ConcreteClass : AbstractClass
 5     {
 6         //必须实现步骤1,用子类自己的方式
 7         public override void Step1()
 8         {
 9             Console.WriteLine("子类实现步骤1");
10         }
11 
12         /// <summary>
13         /// 步骤2可以重写,也可以沿用父类的
14         /// </summary>
15         public override void Step2WithHook()
16         {
17             base.Step2WithHook();
18             Console.WriteLine("子类在父类步骤2的基础上继续操作");
19         }
20     }
View Code

 

posted @ 2025-05-08 16:45  是铭不是明  阅读(11)  评论(0)    收藏  举报