模版方法

本文介绍了一个使用模板方法设计模式的实例,通过此模式减少重复代码并保持各子类的灵活性。具体实现上,抽象出一个包含固定步骤的顶层逻辑,并允许子类重写特定步骤,实现了三个窗体的数据查询功能。

问题背景

话说机房收费系统项目中,有三个窗体的顶层逻辑是一样的。这些逻辑就是:先查询卡号是不是存在,如果存在就把数据显示出来。

模版方法

定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。

Demo

数据库结构



程序结构





代码

DAL

Imports System.Data.SqlClient
Public Class DAL1
    Public Function SelectUserByID(UserID As String) As DataTable
        Dim helper As New SQLHelper
        Dim str = "select * from Table1 where id=@id"
        Dim sqlparam() As SqlParameter = {New SqlParameter("@id", UserID)}
        Return helper.ExecuteQuery(str, CommandType.Text, sqlparam)
    End Function
End Class

Public Class DAL2
    Public Function SelectUserByID(UserID As String) As DataTable
        Dim helper As New SQLHelper
        Dim str = "select * from Table2 where id=@id"
        Dim sqlparam() As SqlParameter = {New SqlParameter("@id", UserID)}
        Return helper.ExecuteQuery(str, CommandType.Text, sqlparam)
    End Function
End Class

Public Class DAL3
    Public Function SelectUserByID(UserID As String) As DataTable
        Dim helper As New SQLHelper
        Dim str = "select * from Table3 where id=@id"
        Dim sqlparam() As SqlParameter = {New SqlParameter("@id", UserID)}
        Return helper.ExecuteQuery(str, CommandType.Text, sqlparam)
    End Function
End Class

BLL

Public MustInherit Class AbstractClass
    Public MustOverride Sub CheckCardID(CardID As String)
    Public MustOverride Function GetCardInfo(CardID As String) As DataTable

    Public Function ExecuteCommand(CardID As String) As DataTable
        CheckCardID(CardID)
        Return GetCardInfo(CardID)
    End Function
End Class

Public Class ConcreteClass1 : Inherits AbstractClass

    Public Overrides Sub CheckCardID(CardID As String)
        Dim DAL As New DAL1
        Dim mydatatable As DataTable
        mydatatable = DAL.SelectUserByID(CardID)
        If mydatatable.Rows.Count = 0 Then
            Throw New Exception("没有数据!")
        End If
    End Sub

    Public Overrides Function GetCardInfo(CardID As String) As DataTable
        Dim DAL As New DAL1
        Return DAL.SelectUserByID(CardID)
    End Function
End Class

Public Class ConcreteClass2 : Inherits AbstractClass

    Public Overrides Sub CheckCardID(CardID As String)
        Dim DAL As New DAL2
        Dim mydatatable As DataTable
        mydatatable = DAL.SelectUserByID(CardID)
        If mydatatable.Rows.Count = 0 Then
            Throw New Exception("没有数据!")
        End If
    End Sub

    Public Overrides Function GetCardInfo(CardID As String) As DataTable
        Dim DAL As New DAL2
        Return DAL.SelectUserByID(CardID)
    End Function
End Class

Public Class ConcreteClass3 : Inherits AbstractClass

    Public Overrides Sub CheckCardID(CardID As String)
        Dim DAL As New DAL3
        Dim mydatatable As DataTable
        mydatatable = DAL.SelectUserByID(CardID)
        If mydatatable.Rows.Count = 0 Then
            Throw New Exception("没有数据!")
        End If
    End Sub

    Public Overrides Function GetCardInfo(CardID As String) As DataTable
        Dim DAL As New DAL3
        Return DAL.SelectUserByID(CardID)
    End Function
End Class

Form1

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myBll As New ConcreteClass1
        Try
            DataGridView1.DataSource = myBll.ExecuteCommand(TextBox1.Text)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Form2.Show()
        Form3.Show()
    End Sub
End Class

Form2

Public Class Form2

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myBll As New ConcreteClass2
        Try
            DataGridView1.DataSource = myBll.ExecuteCommand(TextBox1.Text)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class

Form3

Public Class Form3

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myBll As New ConcreteClass3
        Try
            DataGridView1.DataSource = myBll.ExecuteCommand(TextBox1.Text)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class


评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值