设计模式----模板方法模式

模板方法模式

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

结构图

ps:

   AbstractClass 实现了一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。

concreteClass 实现primitiveOperation已完成算法中与特定子类相关的步骤。

大话中关于考试抄错题的为例

     类图如下

     

代码实现

 class TestPaper
    {
        //
        public void TestQuestion1()
        {
            Console.WriteLine("10*10=[] a.100   b.30 c. 50");
            Console.WriteLine("答案:" + Answer1());
        }
        protected virtual string Answer1()
        {
            return "";
        }
        public void TestQuestion2()

        {
            Console.WriteLine("20+50=[] a.20 b.30 c.70");
            Console.WriteLine("答案:" + Answer2());

        }
        protected virtual string Answer2()
        {
            return "";
        }
        public void TestQuestion3()
        {
            Console.WriteLine("100/20=[] a.5 b.50 c.20");
            Console.WriteLine("答案:" + Answer3());
           
        }
        protected virtual string Answer3()
        {
            return "";
        }

    }
    //学生子类代码
    class TestPapperA : TestPaper
    {
        protected override string Answer1()
        {
            return "b";
        }
        protected override string Answer2()
        {
            return "c";

        }
        protected override string Answer3()
            {
 	             return "b";
            }
        
       

    }                                                                                                                                                                                                                                                                                                                      
    //学生乙抄的试卷
    class TestPapperB : TestPaper
    {
        protected override string Answer1()
        {
            return "c";
        }
        protected override string Answer2()
        {
            return "a";

        }
        protected override string Answer3()
        {
            return "b";
        }


    }

客户端代码

static void Main(string[] args)
        {
            Console.WriteLine("学生甲抄写的试卷:");
            TestPaper studentA = new TestPapperA();
            studentA.TestQuestion1();
            studentA.TestQuestion2();
            studentA.TestQuestion3();

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

            Console.Read ();
        }

模板方法模式适用的场景

1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

2、各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。

 3、控制子类扩展。模板方法只是特定点调用操作,这样就只允许在这些点进行扩展。

  
  可以看出,使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。这样你在实现子类的时候,根本不需要对业务流程有太多的了解。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值