网站和软件有什么区别,桂阳网页定制,必应网站收录在哪,巴顿品牌设计官网C# 设计模式#xff08;行为型模式#xff09;#xff1a;模板方法模式
在开发过程中#xff0c;我们经常会遇到一类问题#xff1a;一些操作的整体步骤是固定的#xff0c;但某些具体步骤的实现会因为场景不同而有所变化。模板方法模式#xff08;Template Method Pat…C# 设计模式行为型模式模板方法模式
在开发过程中我们经常会遇到一类问题一些操作的整体步骤是固定的但某些具体步骤的实现会因为场景不同而有所变化。模板方法模式Template Method Pattern是一种行为型设计模式能够很好地解决这类问题。
模板方法模式的定义
模板方法模式定义了一个算法的框架并允许子类在不改变算法结构的情况下重新定义某些步骤的实现。它通过将算法的可变部分延迟到子类中使代码的复用性更高扩展性更好。
模板方法模式的结构
模板方法模式包括以下角色
AbstractClass抽象类 定义算法的骨架包括模板方法和抽象方法。ConcreteClass具体子类 实现抽象方法提供特定的逻辑。
示例咖啡和茶的制作流程
我们以制作咖啡和茶为例两者的制作步骤相似但某些具体操作不同
烧水。冲泡饮品咖啡或茶。倒入杯中。添加配料糖、牛奶或柠檬。
代码实现
using System;// 抽象类饮品制作模板
public abstract class BeverageTemplate
{// 模板方法定义制作流程public void PrepareBeverage(){BoilWater();Brew();PourInCup();AddCondiments();}// 通用步骤烧水private void BoilWater(){Console.WriteLine(烧水中...);}// 通用步骤倒入杯中private void PourInCup(){Console.WriteLine(将饮品倒入杯中。);}// 抽象方法冲泡饮品protected abstract void Brew();// 抽象方法添加配料protected abstract void AddCondiments();
}// 具体类咖啡
public class Coffee : BeverageTemplate
{protected override void Brew(){Console.WriteLine(用热水冲泡咖啡。);}protected override void AddCondiments(){Console.WriteLine(添加糖和牛奶。);}
}// 具体类茶
public class Tea : BeverageTemplate
{protected override void Brew(){Console.WriteLine(用热水浸泡茶叶。);}protected override void AddCondiments(){Console.WriteLine(添加柠檬。);}
}// 测试代码
class Program
{static void Main(string[] args){Console.WriteLine(制作咖啡);BeverageTemplate coffee new Coffee();coffee.PrepareBeverage();Console.WriteLine();Console.WriteLine(制作茶);BeverageTemplate tea new Tea();tea.PrepareBeverage();}
}输出结果
制作咖啡
烧水中...
用热水冲泡咖啡。
将饮品倒入杯中。
添加糖和牛奶。制作茶
烧水中...
用热水浸泡茶叶。
将饮品倒入杯中。
添加柠檬。模板方法模式的优缺点
优点
代码复用性高 提取通用代码到抽象类中避免重复代码。灵活性强 子类可以灵活实现具体步骤而无需改变算法结构。遵循开闭原则 新增具体实现时只需添加新子类无需修改抽象类。
缺点
继承关系局限 如果抽象类发生变化所有子类都需要修改。子类数量增加 每个具体实现都需要一个子类。
适用场景
一个操作有固定的步骤但某些步骤需要子类定制化实现。有多个类的行为逻辑相似但在细节实现上有所不同。
总结
模板方法模式是将不变的行为放在父类中具体的实现延迟到子类中从而实现了代码复用和灵活扩展。在实际开发中例如工作流引擎、报表生成等场景都可以看到模板方法模式的身影。