博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之模板方法模式
阅读量:6279 次
发布时间:2019-06-22

本文共 2406 字,大约阅读时间需要 8 分钟。

模板方法模式

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

举例:学生甲和学生乙抄写的试卷非常类似。除了答案不同之外,其余的题目全然同样。假设老师要更改题目,意味着两个人的试卷都须要更改。这样非常easy出错。怎样做才干使错误减少到最少,则须要模板方法模式。

试卷代码例如以下:

namespace _10._3_提炼代码{    class TestPaper    {        //试题1        public void TestQuestion1()        {            Console.WriteLine("试题1");            Console.WriteLine("答案:"+Answer1());        }        protected virtual string Answer1()        {            return"";        }        //试题2        public void TestQuestion2()        {            Console.WriteLine("试题2");            Console.WriteLine("答案:"+Answer2());        }        protected virtual string Answer2()        {            return"";        }        //试题3        public void TestQuestion3()        {            Console.WriteLine("试题3");                Console.WriteLine("答案:"+Answer3());        }        protected virtual string Answer3()        {            return"";        }    }        //学生甲抄的试卷    class TestPaperA : TestPaper    {        protected override string Answer1()        {            return "b";        }        protected override string Answer2()        {            return "c";        }        protected override string Answer3()        {            return "a";        }    }    //学生乙抄的试卷    class TestPaperB : TestPaper    {        protected override string Answer1()        {            return "c";        }        protected override string Answer2()        {            return "a";        }        protected override string Answer3()        {            return "a";        }    }    class Program    {        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();            Console.Read();        }    }}
执行结果例如以下:

模板方法模式包括例如以下两个角色:

(1) AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作能够是详细的,也能够是抽象的,每个基本操作相应算法的一个步骤。在其子类中能够重定义或实现这些步骤。

同一时候。在抽象类中实现了一个模板方法(Template Method)。用于定义一个算法的框架,模板方法不仅能够调用在抽象类中实现的基本方法。也能够调用在抽象类的子类中实现的基本方法,还能够调用其它对象中的方法。

(2) ConcreteClass(详细子类):它是抽象类的子类。用于实如今父类中声明的抽象基本操作以完毕子类特定算法的步骤。也能够覆盖在父类中已经实现的详细基本操作。

你可能感兴趣的文章
Python 的基本运算和内置函数
查看>>
Oracle OCP之硬解析在共享池中获取内存锁的过程
查看>>
在imageView依次加入7个手势, 1.点击哪个button,往imageView上加入哪个手势.(保证视图上仅仅有一个手势). 2.轻拍:点击视图切换美女图片.(imageView上首先...
查看>>
2 怎样解析XML文件或字符串
查看>>
linux驱动编写之poll机制
查看>>
hdu 1874 畅通project续
查看>>
kvm克隆
查看>>
系统理论
查看>>
单点登录系统功能调试界面
查看>>
H5结合百度map实现GPS定位
查看>>
一起学习Maven
查看>>
Codeforces 474 D. Flowers
查看>>
Lightoj 1043 - Triangle Partitioning【二分】
查看>>
Spring Boot 概念知识
查看>>
大杂烩 -- HashMap、HashTable、ConCurrentHashMap 联系与区别
查看>>
android 自己定义标签的使用,实现扁平化UI设计
查看>>
This Activity already has an action bar supplied by the window decor
查看>>
SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
查看>>
【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】...
查看>>
tengine2.1.0RPM包制做 tengine-2.1.0.spec配置
查看>>