模板方法
模板方法例子如下,还是计算器为例。
public enum Operator { Add,Sub,Mul,Div}
public abstract class CalTemplate { public abstract Operator Operator { get; } public abstract List<decimal> Parameters { get; } public virtual decimal Calculate() { switch (Operator) { case Operator.Add: return Parameters.Aggregate((x, y) => x + y); case Operator.Sub: return Parameters.Aggregate((x, y) => x - y); case Operator.Mul: return Parameters.Aggregate((x, y) => x * y); case Operator.Div: return Parameters.Aggregate((x, y) => x / y); default: throw new ArgumentNullException(nameof(Operator)); } } }
public class AddConcrete : CalTemplate { private List<decimal> _data; public AddConcrete(params decimal[] data) { _data = data.ToList(); } public override Operator Operator => Operator.Add; public override List<decimal> Parameters => _data; }
CalTemplate template = new AddConcrete(1, 2, 3, 4, 5); var result = template.Calculate(); Trace.WriteLine(result);
上面只展示了add的实例。
总结:
这个例子跟策略模式很像,只不过策略模式是抽象了对象的行为,而这个模式是把一组抽象行为通过一定规则做了顺序执行。 都是行为模式,一个是一个对象的行为,一个是一个对象的N个行为做了排版吧。策略模式是通过委托来解决问题,模板是通过继承来解决问题。
到这里其实还可以联想到建造者模式,只不过一个是对对象的排版,一个是对行为的排版。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)