模板方法

由来

  • 模板方法实现父类和子类对象之间职责的划分
  • 使用继承机制使得父类和子类之间达到分工合作的目的
  • 基类中确定算法框架(不变), 子类实现具体工作(可变)

意图、动机和适用性

  • 意图
    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中
    子类不需要改变算法结构即可重定义算法的某些步骤
  • 动机
    将相同的代码放在父类中,不同的方法实现放在不同的子类中
  • 适用情形
    存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

结构与参与者

在这里插入图片描述

  • 抽象类角色(AbstractClass)
    定义抽象的原语操作(primitive operation),具体的子类将重定义它们以实现一个算法的各步骤
  • 具体类角色(ConcreteClass)
    实现原语操作以完成算法中与特定子类相关的步骤

代码示例

public abstract class AbstractClass
{
	public void TemplateMethod()
	{
		Primitive1();
		Primitive2();
	}
	public abstract void Primitive1();
	public abstract void Primitive2();
}
public class ConcreteClass :AbstractClass
{
	public override void Primitive1()
	{}
	public override void Primitive2()
	{}
}
客户端引用示例:
AbstractClass cls = new ConcreteClass();
cls.TemplateMethod();

效果

  • 模板方法是一种代码复用技术,提取了子类的公共行为
  • 模板方法导致一种反向的控制结构(依赖倒置原则):一个父类调用子类的操作,而不是相反
  • 通过在抽象模板定义模板方法给出成熟算法步骤, 同时不限制步骤细节, 具体算法实现细节不改变算法骨架
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值