设计模式之模板方法模式

前端之家收集整理的这篇文章主要介绍了设计模式之模板方法模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从看大话结束,到现在差不多有2个多月了。其实刚开始看大话,只是觉得他讲的特别好,每个模式用故事来分析,印象很深。但是,我想说的是,这些故事,不仅仅给予一个印象深的作用,更重要的是一种思想。这个里面,有好多例子都是一步步改进才得到最后的模式。这样,使得在敲代码的过程中,当看到有重复性多的代码时就会停下来思考,将共同的部分抽象出来。而不是像以前,ctrl+c、ctrl+v。

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

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

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

Public Enum OnLineField

    onlincardno
    onlinstudentname
    onlinondate
    onlinontime
    onlincomputer

End 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 Sub
End 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 strValue As String)        
        FillFieldName(intFileName)
        strOperator = strOp
        value = strValue    
     End Sub  
   
    '定义一个虚方法,此方法用于子类定义自己与父类不同的地方——fieldName
    Protected Overridable Sub FillFieldName(ByVal intFileName As Integer)   
 
    End Sub
End Class 

'子类
Public Class basicOnLineInfo
                  Inherits Basic     

    '定义自己特有的OnLineField类型变量    
     Public fieldName As OnLineField   
  
    '重写FillFieldName方法    
     Protected Overrides Sub FillFieldName(ByVal intFileName As Integer)
        fieldName = intFileName
    End Sub
End Class

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

猜你在找的VB相关文章