设计模式笔记(十五) —— 模板方法模式

模板方法模式(TemplateMethod):定义一个操作中的算法骨架,而将一些算法延迟到子类中。模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。模板方法就是通过把不变行为搬移到超类,去掉子类中的重复代码来体现它的优势。模板方法提供了一个很好的代码复用平台。 

  1. using System;
  2. namespace StuDesignMode.TemplateMethod
  3. {
  4.    abstract class AbsSuperClass
  5.     {
  6.        public void QuestionA()
  7.        {
  8.            Console.WriteLine("炼成倚天剑、屠龙刀的玄铁成分是:A.球磨铸铁 B.马口铁 C.高速合金钢 D.碳素纤维");
  9.            Console.WriteLine("答案是:{0}",this.AnswerA());
  10.        }
  11.        protected virtual string AnswerA()
  12.        {
  13.            return "A";
  14.        }
  15.        public void QuestionB()
  16.        {
  17.            Console.WriteLine("杨过、程英,陆无双铲除了情花,造成【】:A.使这种植物不再害人 B.使一种珍惜物种灭绝 C.破坏了那个生物圈的生态平衡 D.造成该地区沙漠化");
  18.            Console.WriteLine("答案是:{0}",this.AnswerB());
  19.        }
  20.        protected virtual string AnswerB()
  21.        {
  22.            return "D";
  23.        }
  24.     }
  25.    class ConcreteClassA : AbsSuperClass
  26.    {
  27.        protected override string AnswerA()
  28.        {
  29.            return "C";
  30.        }
  31.        protected override string AnswerB()
  32.        {
  33.            return "A";
  34.        }
  35.    }
  36.    class ConcreteClassB : AbsSuperClass
  37.    {
  38.        protected override string AnswerA()
  39.        {
  40.            return "B";
  41.        }
  42.        protected override string AnswerB()
  43.        {
  44.            return "D";
  45.        }
  46.    }
  47.    public class ClientTest
  48.    {
  49.        static void Main(string[] args)
  50.        {
  51.            Console.WriteLine("金庸武侠六级考试题:");
  52.            Console.WriteLine("/n学生A的答案是:");
  53.            ConcreteClassA stuA = new ConcreteClassA();
  54.            stuA.QuestionA();
  55.            stuA.QuestionB();
  56.            Console.WriteLine("/n学生A的答案是:");
  57.            ConcreteClassB stuB = new ConcreteClassB();
  58.            stuB.QuestionA();
  59.            stuB.QuestionB();
  60.            Console.WriteLine();
  61.        }
  62.    }
  63. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值