设计模式のTemplatePattern(模板模式)----行为模式
本质:提取公共,创建各异(”一中各表,不做选择”)
一、产生背景
在程序设计中,可能每个对象都有共同的地方,而此时如果每个对象定义一次,如下例子,每个对象都写Stay()方法,这样在每个类中都有很多相同的代码,此时,我们需要用到模板设计模式,来解决这个问题
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
二、实现方式
是把相同的部分抽象出来到抽象类中去定义,具体子类来继承抽象类,并实现抽象类中的抽象方法,从而达到具体实现的不同部分,这个思路也正式模板方法的实现精髓所在
也就是常见类与对象的继承问题
三、实例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TemplatePattern { class Program { static void Main(string[] args) { People p = new Chinese(); People p2 = new English(); Console.ReadLine(); } public abstract class People { public People() { Stay(); Console.WriteLine("我们是人类"); Country(); Say(); } public void Stay() { Console.WriteLine("我住在地球"); } public abstract void Country(); public abstract void Say(); } public class Chinese : People { public override void Country() { Console.WriteLine("我是中国人"); } public override void Say() { Console.WriteLine("我们说中文"); } } public class English : People { public override void Country() { Console.WriteLine("We are English"); } public override void Say() { Console.WriteLine("We speak English"); } } } }
四、模式分析
优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。