模板方法模式(TemplateMethod):定义一个操作中的算法骨架,而将一些算法延迟到子类中。模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。模板方法就是通过把不变行为搬移到超类,去掉子类中的重复代码来体现它的优势。模板方法提供了一个很好的代码复用平台。
- using System;
- namespace StuDesignMode.TemplateMethod
- {
- abstract class AbsSuperClass
- {
- public void QuestionA()
- {
- Console.WriteLine("炼成倚天剑、屠龙刀的玄铁成分是:A.球磨铸铁 B.马口铁 C.高速合金钢 D.碳素纤维");
- Console.WriteLine("答案是:{0}",this.AnswerA());
- }
- protected virtual string AnswerA()
- {
- return "A";
- }
- public void QuestionB()
- {
- Console.WriteLine("杨过、程英,陆无双铲除了情花,造成【】:A.使这种植物不再害人 B.使一种珍惜物种灭绝 C.破坏了那个生物圈的生态平衡 D.造成该地区沙漠化");
- Console.WriteLine("答案是:{0}",this.AnswerB());
- }
- protected virtual string AnswerB()
- {
- return "D";
- }
- }
- class ConcreteClassA : AbsSuperClass
- {
- protected override string AnswerA()
- {
- return "C";
- }
- protected override string AnswerB()
- {
- return "A";
- }
- }
- class ConcreteClassB : AbsSuperClass
- {
- protected override string AnswerA()
- {
- return "B";
- }
- protected override string AnswerB()
- {
- return "D";
- }
- }
- public class ClientTest
- {
- static void Main(string[] args)
- {
- Console.WriteLine("金庸武侠六级考试题:");
- Console.WriteLine("/n学生A的答案是:");
- ConcreteClassA stuA = new ConcreteClassA();
- stuA.QuestionA();
- stuA.QuestionB();
- Console.WriteLine("/n学生A的答案是:");
- ConcreteClassB stuB = new ConcreteClassB();
- stuB.QuestionA();
- stuB.QuestionB();
- Console.WriteLine();
- }
- }
- }