模板方法模式

模板方法模式

定义

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

解释:

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

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

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

模板方法模式_第1张图片

代码

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

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是用反射去实现这些机制的)

你可能感兴趣的:(Unity,设计模式,Unity,设计模式,模板方法)