设计模式之模板方法模式

来源:互联网 发布:手机宽带连接拨号软件 编辑:程序博客网 时间:2024/05/17 06:58
        从看大话结束,到现在差不多有2个多月了。其实刚开始看大话,只是觉得他讲的特别好,每个模式用故事来分析,印象很深。但是,我想说的是,这些故事,不仅仅给予一个印象深的作用,更重要的是一种思想。这个里面,有好多例子都是一步步改进才得到最后的模式。这样,使得在敲代码的过程中,当看到有重复性多的代码时就会停下来思考,将共同的部分抽象出来。而不是像以前,ctrl+c、ctrl+v。

        下面举个例子,起初我用的不是class,而是structure。但是发现在vb.net中structure不一样,所以后来改成class,进而有了下面的改进。(关于structure下篇稍微提一下)

         例子中,用到了枚举类型,这个枚举类型是用来动态实现数据库字段名与combobox下拉菜单的关联(好处是省去了select case语句来判断)

         首先,看一下我最起初的样子(只列出一个,不然文章会太长,后面同样)

 

 

Public Enum OnLineField    onlincardno    onlinstudentname    onlinondate    onlinontime    onlincomputerEnd Enum'定义查询需要用到的类public Class OnLineCondition      Public strOperator As String       Public value As String       Public strRelation As String      Public fieldName as OnLineField      ‘初始化       Public Sub New()         strRelation="and"         strOperator="="      End Sub      '填充      Public Sub Fill(ByVal intFileName As Integer, ByVal strOp As String, ByVal strValue As String)         fieldName=intFileName         strOperator = strOp         value = strValue      End SubEnd Class


             这些类很类似,不一样只是fieldName不一样。敲着敲着,想到了抄卷子这个小故事,然后就翻开大话找到了模板方法模式,然后对这部分进行了改造。下面是改造后的代码。

 

 

'父类Public Class Basic    
    ’定义公共变量    Public strOperator As String  '查询用到的操作符    Public value As String  '待查询字段值    Public strRelation As String        '初始化属性        Public Sub New()        strOperator = "="        strRelation = "and"    End Sub         '对变量进行填充,由于枚举类型的特殊性,所以我在这传入了一个整型变量         Public Sub Fill(ByVal intFileName As Integer, ByVal strOp As String, ByVal strValue As String)                FillFieldName(intFileName)        strOperator = strOp        value = strValue         End Sub         '定义一个虚方法,此方法用于子类定义自己与父类不同的地方——fieldName
    Protected Overridable Sub FillFieldName(ByVal intFileName As Integer)        End SubEnd Class '子类Public Class basicOnLineInfo                  Inherits Basic         '定义自己特有的OnLineField类型变量         Public fieldName As OnLineField         '重写FillFieldName方法         Protected Overrides Sub FillFieldName(ByVal intFileName As Integer)        fieldName = intFileName    End SubEnd Class

以上就是我对类的改造,大话教的不只是设计模式,更是一种思想

 

 

原创粉丝点击