优雅的活着需要幸福的努力着!

我们机房组合查询设计到四个功能,分别是学生基本信息维护,操作员工作记录,学生在线查询,学生上机统计信息查询。它们的设计界面,和实现方法大同小异。我们就想恰好用“模板方法”来设计次类功能模块。用该模式的时候,首先我们要分清什么是变化的,什么是不变的;对于不变,子类会自动继承;对于可变的,就需要在父类中暴露出来,在子类中去实现。

下面就我们组合查询,说一下“模板方法”的应用。

在四个组合查询里面:

1)不变的:界面布局,传递字符串的组成,判断界面是否为空等。

2)变化的:部分字符串的内容(中文转化成英文);它们的Click事件按不同(他们实现的形式相同,但是功能不同)。

接下来就是我们的具体实现:

UML图:

UML代码:

‘作者:胡晓洁’说明:组合查询的父窗体,抽象类’创建日期:2013年4月30日’版本号:机房收费系统v1.0Public Class frmGroupQuery’母板的Click的事件Private Sub btnQuery_Click(sender As Object, e As EventArgs) Handles btnQuery.Click’限制不能输入为空’当第一个组合关系为空If cmbRelation0.Text = "" ThenDim arraryControl() As ControlReDim Preserve arraryControl(2)arraryControl(0) = cmbZiDuan0 ‘字段1arraryControl(1) = cmbOperate0 ‘操作符1arraryControl(2) = txtContent0 ‘要输入的内容1’调用函数SomeEmptyText判断控件中内容是否为空If UIComonFunction.VerifySomeEmpty(arraryControl) ThenExit SubEnd IfEnd If’当第一个组合关系不为空,第二个组合关系为空If cmbRelation0.Text <> "" And cmbRelation1.Text = "" ThenDim arrayControl() As Control ‘定义函数ReDim Preserve arrayControl(6) ‘函数的最小值为6arrayControl(0) = cmbZiDuan0 ‘字段1arrayControl(1) = cmbOperate0 ‘操作符1arrayControl(2) = txtContent0 ‘要输入的内容1arrayControl(3) = cmbRelation0 ‘组合关系1arrayControl(4) = cmbZiDuan1 ‘字段2arrayControl(5) = cmbOperate1 ‘操作符2arrayControl(6) = txtContent1 ‘要输入的内容2’调用函数SomeEmptyText判断控件中的内容是否为空If UIComonFunction.VerifySomeEmpty(arrayControl) ThenExit SubEnd IfEnd If’ 当第二个组合关系不为空时If cmbRelation1.Text <> "" ThenDim arrayControl() As Control ‘定义函数ReDim Preserve arrayControl(10) ‘函数的最小值为6arrayControl(0) = cmbZiDuan0 ‘字段1arrayControl(1) = cmbOperate0 ‘操作符1arrayControl(2) = txtContent0 ‘要输入的内容1arrayControl(3) = cmbRelation0 ‘组合关系1arrayControl(4) = cmbZiDuan1 ‘字段2arrayControl(5) = cmbOperate1 ‘操作符2arrayControl(6) = txtContent1 ‘要输入的内容2arrayControl(7) = cmbRelation1 ‘组合关系1arrayControl(8) = cmbZiDuan2 ‘字段2arrayControl(9) = cmbOperate2 ‘操作符2arrayControl(10) = txtContent2 ‘要输入的内容2’调用函数SomeEmptyText判断控件中的内容是否为空If UIComonFunction.VerifySomeEmpty(arrayControl) ThenExit SubEnd IfEnd If’由于不同的操作用不同Click事件处理实现,此处也是变化的,接下来就是暴露出来(虚函数)SearchDataClick()’只读dgvShowData.ReadOnly = True’不允许最后一行为空dgvShowData.AllowUserToAddRows = FalseEnd Sub ‘变化的只有:中英文转化,而传递的字符串是不变的,Answer是变化的。’用到了继承,在子类中重写父类的变化。把子类传过来,重写父类 Public Function CmbQuery(ByVal frm As frmGroupQuery) As String’传递查询字符串Dim comStr As StringIf frm.cmbRelation0.Text = "" ThencomStr = " " & Answer(frm.cmbZiDuan0.Text) & frm.cmbOperate0.Text & " ‘" & frm.txtContent0.Text & "’"ElseIf frm.cmbRelation1.Text = "" ThencomStr = "" & Answer(frm.cmbZiDuan0.Text) & frm.cmbOperate0.Text & " ‘" & frm.txtContent0.Text & "’ " & Answer(frm.cmbRelation0.Text) & " " & Answer(frm.cmbZiDuan1.Text) & frm.cmbOperate1.Text & "’" & frm.txtContent1.Text & "’"ElseIf frm.cmbRelation1.Text <> "" ThencomStr = "" & Answer(frm.cmbZiDuan0.Text) & frm.cmbOperate0.Text & " ‘" & frm.txtContent0.Text & "’ " & Answer(frm.cmbRelation0.Text) & " " & Answer(frm.cmbZiDuan1.Text) & frm.cmbOperate1.Text & "’" & frm.txtContent1.Text & "’" & Answer(frm.cmbRelation1.Text) & " " & Answer(frm.cmbZiDuan2.Text) & frm.cmbOperate2.Text & "’" & frm.txtContent2.Text & "’"End IfEnd IfEnd IfReturn comStrEnd Function”’ <summary>”’ 暴露出变化的Answer,根据选择条件的不同转换成不同的数据库字段 (中英文转换)”’ </summary>”’ <param name="GetResult">参数,根据combox控件内容的不同获取不同结果</param>”’ <returns>返回GetResult,根据选择条件的不同转换成不同的数据库字段</returns>”’ <remarks>胡晓洁 2013年11月7日</remarks> Protected Overridable Function Answer(ByVal GetResult As String) As StringReturn "" ‘返回值End Function”’ <summary>”’ Click事件是变化的,,把SearchDataClick暴露出来,在子类中重写父类的Click事件”’ </summary>”’ <returns></returns>”’ <remarks></remarks> Protected Overridable Function SearchDataClick()Return ""End Function’退出Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.ClickMe.Dispose()End Sub’根据选择的关系控制控件的使用情况Private Sub frmGroupQuery_Load(sender As Object, e As EventArgs) Handles MyBase.Load’ cmbRelation0.Enabled = FalsecmbZiDuan1.Enabled = FalsecmbOperate1.Enabled = FalsetxtContent1.Enabled = FalsecmbRelation1.Enabled = FalsecmbZiDuan2.Enabled = FalsecmbOperate2.Enabled = FalsetxtContent2.Enabled = FalseEnd SubPrivate Sub cmbRelation0_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelation0.SelectedIndexChangedcmbZiDuan1.Enabled = TruecmbOperate1.Enabled = TruetxtContent1.Enabled = TruecmbRelation1.Enabled = TrueEnd SubPrivate Sub cmbRelation1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelation1.SelectedIndexChangedcmbZiDuan2.Enabled = TruecmbOperate2.Enabled = TruetxtContent2.Enabled = TrueEnd SubEnd Class

以“学生基本信息维护”,来体验一下模版方法的应用

对的,坚持;错的,放弃!

优雅的活着需要幸福的努力着!

相关文章:

你感兴趣的文章:

标签云: