下面举个例子,起初我用的不是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
以上就是我对类的改造,大话教的不只是设计模式,更是一种思想