说说设计模式~ 模版模式(Template)
模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现,这可能会让我们想到策略模式,两者有着本质的区别。
何时能用到它?
我们看一下策略模式的应用场景
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),一般会定义一个接口规范,使用不同的策略方式去实现它
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
而模版方法模式的应用场景
1、多个类区别在于主流程中的某个细节
2、客户可以自已实现模版里的抽象方法
3、对客户隐藏具体的实现流程(方法的组合的顺序)
模版模式的结构图
模版模式实现说明
OrderGenerator:模版模式基类,实现了某种业务的完整流程,其中一些核心方法已经实现,一些个性化方法被声明为抽象方法,让子类去实现。
B2COrderGenerator:B2C业务中去实现抽象方法
C2COrderGenerator:C2C业务中去实现抽象方法
模版模式的C#实现
/// <summary> /// 模版核心类 /// </summary> abstract class OrderGenerator { /// <summary> /// 核心处理流程 /// </summary> public void Excute() { InsertData(); ProcessException(); InsertLog(); } void InsertData() { Console.WriteLine("写数据对外面隐藏"); } void InsertLog() { Console.WriteLine("写日志对外面隐藏"); } /// <summary> /// 异常处理逻辑,对外面开放,可以自己建立自己的异常规范 /// </summary> protected abstract void ProcessException(); } /// <summary> /// b2c项目业务处理方法 /// </summary> class B2COrderGenerator : OrderGenerator { protected override void ProcessException() { Console.WriteLine("b2c项目中订单的异常处理方式"); } } /// <summary> /// c2c项目业务处理方法 /// </summary> class C2COrderGenerator : OrderGenerator { protected override void ProcessException() { Console.WriteLine("c2c项目中订单的异常处理方法"); } }
调用方法
#region 模版方法调用 OrderGenerator orderGenerator = new B2COrderGenerator(); orderGenerator.Excute(); #endregion
程序截图
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2011-11-07 MVC+LINQToSQL的Repository模式之(四)数据统一更新的附加类