设计模式(七)——模板方法模式

模板方法模式(Template Method)

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

代码

我们以一个试卷问答的程序来阐述模板方法模式:

1.代码如下:

试卷基类

using System;

namespace TemplateMethod
{
	//试题类
	public class TestPaper
	{
		//问题1
		public void TestQuestion1(){
			Console.WriteLine ("问题1");
			Console.WriteLine ("答案:" + Answer1 ());
		}
		//问题2
		public void TestQuestion2(){
			Console.WriteLine ("问题2");
			Console.WriteLine ("答案:" + Answer2 ());
		}
		//问题3
		public void TestQuestion3(){
			Console.WriteLine ("问题3");
			Console.WriteLine ("答案:" + Answer3 ());
		}
		//答案1
		protected virtual string Answer1(){
			return "";
		}
		//答案2
		protected virtual string Answer2(){
			return "";
		}
		//答案3
		protected virtual string Answer3(){
			return "";
		}
	}
}

具体的试卷类

using System;

namespace TemplateMethod
{
	public class TestPaperA:TestPaper
	{
		protected override string Answer1(){
			return "b";
		}
		protected override string Answer2(){
			return "c";
		}
		protected override string Answer3(){
			return "a";
		}
	}
}

using System;

namespace TemplateMethod
{
	public class TestPaperB:TestPaper
	{
		protected override string Answer1(){
			return "c";
		}
		protected override string Answer2(){
			return "a";
		}
		protected override string Answer3(){
			return "a";
		}
	}
}
2.客户端代码如下:

客户端代码

using System;

namespace TemplateMethod
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Console.WriteLine ("学生甲抄的试卷:");
			TestPaper studentA = new TestPaperA ();
			studentA.TestQuestion1 ();
			studentA.TestQuestion2 ();
			studentA.TestQuestion3 ();

			Console.WriteLine ("学生乙抄的试卷:");
			TestPaper studentB = new TestPaperB ();
			studentB.TestQuestion1 ();
			studentB.TestQuestion2 ();
			studentB.TestQuestion3 ();
		}
	}
}

3.运行结果

UML图


源码下载地址 :https://gitee.com/ZhaoYongshuang/DesignPattern.git
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值