设计模式之模板方法模式

        从看大话结束,到现在差不多有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 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 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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值