模板方法例子如下,还是计算器为例。
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个行为做了排版吧。
到这里其实还可以联想到建造者模式,只不过一个是对对象的排版,一个是对行为的排版。
标签:return,Parameters,方法,Aggregate,Operator,data,public,模板 From: https://www.cnblogs.com/morec/p/16900458.html