模板方法模式

模板方法模式

定义

模板方法(Template Method)——在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

解释:

从类图上来看,模板方法非常简单,就是一个 继承 关系。

从目的来看,模板方法就是就是将方法的实现延迟到子类中去:

  1. 同一类相同的方法在父类中实现,不同的方法在子类中实现
  2. 在抽象类方法中调用一些抽象方法,但这些方法在子类中实现,这个调用抽象方法的方法就叫模板方法
UML

在这里插入图片描述

代码

首先定义一个抽象类,包含模板方法和抽象方法

namespace DesignModel.TemplateMethod
{
	public abstract class AbstractClass 
	{
        //模板方法
		public void TemplateMethod()
		{
			PrimitiveOperation1();
			PrimitiveOperation2();
		}
		
        //抽象方法
		public abstract void PrimitiveOperation1();
		public abstract void PrimitiveOperation2();
	}
}

然后完成他的一个实现

namespace DesignModel.TemplateMethod
{
	public class ConcreteClass : AbstractClass 
	{
		public override void PrimitiveOperation1()
		{
			Debug.Log("Concrete Operation 1");
		}

		public override void PrimitiveOperation2()
		{
			Debug.Log("Concrete Operation 2");
		}
	}
}

接着在客户端进行简单调用

using DesignModel.TemplateMethod;

public class Client_TemplateMethod : MonoBehaviour 
{
	void Start () 
	{
		//实际上应该定义一个参数去传递这个抽象进来,这里简单的直接创建了
		AbstractClass concrete = new ConcreteClass();
		concrete.TemplateMethod();
	}
}

结果
在这里插入图片描述

模板方法的应用

优点:

​ 1.抽象类只负责定义一个模板,而不关心实现,符合单一职责原则,迪米特法则

​ 2.具体实现交由子类完成,而调用者并不依赖具体的子类,符合依赖倒置原则

​ 3.当扩展功能时,仅需要新增子类即可,符合开闭原则

缺点:

​ 1.增加了抽象层,增加了系统复杂程度

应用场景:

​ 模板方法通常使用在框架类中,对于一个框架来说,框架只是制定了一系列的规则,具体的实现由用户去定义。

​ 例如在Unity3d中,我们最经常使用的Start,Update等函数,我们只知道Start是每次脚本开始时执行的函数,而Update是脚本每帧执行的函数,我们定义脚本去实现对应的函数就行了。但我们并不需要知道Start和Update是如何被调用的。(实际上Unity是用反射去实现这些机制的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值