读书人

设计模式之小弟我见-7 模板方法模式

发布时间: 2012-08-15 16:57:17 作者: rapoo

设计模式之我见--7 模板方法模式

在开发的过程中到了后期的时候,我们可能都会遇到代码的修改问题,如果一个设计良好的程序,改动量会很小,否则会很麻烦。在开发过程中有一条原则DRY原则,Don't Repeat Yourself。这个意思我的理解就是在开发的过程中尽量使相同的代码,出现在一个地方,不要使相同的代码出现在不同的地方,尽量减少重复的代码,这样我们修改的时候也会比较简单了。在程序中如果过多的使用复制粘贴,会使后面的开发变得十分麻烦。

模板方法可以很好的解决这列问题,模板方法模式定义一个操做中的算法的骨架,而将一个步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构可以重新定义该算法某些特定的步骤。模板方法模式通过把不变的行为搬到超类,去除子类中的重复代码来体现它的优势。模板方法模式就是提供了一个很好的代码的复用平台。当我们碰到这样的情况,当不变的和可变的行为在方法子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

下面举例说明一下。我们在做试卷的时候所有的试卷内容都是一样的,只是答案不一样,如果我们将这些题目,都在自己的子类中复制一份,那么很可能出错。如果题目一变,我们所有的程序都要改变。我们这时候就可以使用模板方法。

类图:

设计模式之小弟我见-7 模板方法模式

代码:

TestPageA1. 在C#中,下列( )是正确的变量名称。A. public B. _123 C. 9int D. ~bool 答案:B2.类中某属性仅有get访问器,则该属性为()。A. 只读属性 B. 只写属性  C. 读写属性 D. 不可读不可写的属性答案:A3. 下列选项中,()是引用类型。A.enum类型 B. struct类型 C. string类型 D. int类型 答案:CTestPageB1. 在C#中,下列( )是正确的变量名称。A. public B. _123 C. 9int D. ~bool 答案:B2.类中某属性仅有get访问器,则该属性为()。A. 只读属性 B. 只写属性  C. 读写属性 D. 不可读不可写的属性答案:B3. 下列选项中,()是引用类型。A.enum类型 B. struct类型 C. string类型 D. int类型 答案:C

简单的说就是准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方法实现这些抽象方法,从而对剩余的逻辑有不同的实现。

所写的都是自己的理解,如果哪里错误,还请指出。

1楼xiaowei_cqu昨天 10:23
博主写得很到位~n只是感觉这个试卷的例子有点奇怪,基于“试卷”的需求不需要模板方法设计很多子类(不然会有3!=6种子类),用一个 void Answer(string as1, string as2, string as3) 的方法就好了
Re: mengxiangyue昨天 12:05
回复xiaowei_cqu模板方法模式定义了一个算法的步骤,并允许次类别为一个或多个步骤提供其实践方式。让次类别在不改变算法架构的情况下,重新定义算法中的某些步骤。如果某个人想多加点东西,使用模板方法模式就可以直接在自己的类里加,但是按照你的方法这样就会都更改了。最后说这个例子可能不是很合适。

读书人网 >软件开发

热点推荐