模板方法模式——【VB.NET机房收费系统(组合查询)】

2024-05-11 01:32

本文主要是介绍模板方法模式——【VB.NET机房收费系统(组合查询)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

友情回顾

                   学习是一个反复的过程……

                    当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,模板方法登场了。个人通俗的理解,模板方法把共同的不变行为抽出(拿出)到一个抽象类,那么子类中的重复代码大大减少,很好的体现了代码复用性。看看模板方法模式的UML


机房收费系统中的模板模式

             主要思路是建立一个空的窗体作为父窗体,而其余有具体执行内容的窗体作为子窗体,这样我们在编码过程中只需要对子窗体中不同执行过程的方法进行重写就可以了。

小编就本人就自己的习惯,展示一下我对机房收费系统的组合查询部分的理解和代码的诠释。(红框中的父类模板窗体)




在父类窗体中的代码,则是我们一贯抽象出的共同部分

'//*******************************************************
'** 作者: 徐露
'** 创始时间:2014-9-1
'** 小组:
'** 完成时间:2014-10-31
'** 描述:个人机房重构
'** 项目说明:   组合查询父类   
'**********************************************************
Imports ChargeSystem.Entity
Imports ChargeSystem.BLL
Public Class from1Public eGroupQuery As New Entity.EGroupQueryPrivate Sub btnQuery_Click(sender As Object, e As EventArgs) Handles btnQuery.ClickDGV.DataSource = Nothing'组合关系A 为空时If cboRelationA.Text = "" ThenDim arrayControl() As Windows.Forms.ControlReDim Preserve arrayControl(2)arrayControl(0) = cboFieldAarrayControl(1) = cboOperatorAarrayControl(2) = txtContentAIf PublicInfo.IsSomeEmptyText(arrayControl) ThenExit SubEnd IfEnd If'组合关系A 不为空时If cboRelationA.Text <> "" ThenDim arrayControl() As Windows.Forms.ControlReDim Preserve arrayControl(5)arrayControl(0) = cboFieldAarrayControl(1) = cboOperatorAarrayControl(2) = txtContentAarrayControl(3) = cboFieldBarrayControl(4) = cboOperatorBarrayControl(5) = txtContentBIf PublicInfo.IsSomeEmptyText(arrayControl) ThenExit SubEnd IfEnd If'组合关系B 不为空时If cboRelationB.Text <> "" ThenDim arrayControl() As Windows.Forms.ControlReDim Preserve arrayControl(8)arrayControl(0) = cboFieldAarrayControl(1) = cboOperatorAarrayControl(2) = txtContentAarrayControl(3) = cboFieldBarrayControl(4) = cboOperatorBarrayControl(5) = txtContentBarrayControl(6) = cboFieldCarrayControl(7) = cboOperatorCarrayControl(8) = txtContentCIf PublicInfo.IsSomeEmptyText(arrayControl) ThenExit SubEnd IfEnd If'定义一个实体Dim eGroupQuery As New EGroupQueryeGroupQuery.cboFieldA = GetDBName(cboFieldA.Text.Trim)eGroupQuery.cboFieldB = GetDBName(cboFieldB.Text.Trim)eGroupQuery.cboFieldC = GetDBName(cboFieldC.Text.Trim)eGroupQuery.cboOperatorA = cboOperatorA.Text.TrimeGroupQuery.cboOperatorB = cboOperatorB.Text.TrimeGroupQuery.cboOperatorC = cboOperatorC.Text.TrimeGroupQuery.cboRelationA = GetDBName(cboRelationA.Text.Trim)eGroupQuery.cboRelationB = GetDBName(cboRelationB.Text.Trim)eGroupQuery.txtContentA = txtContentA.Text.TrimeGroupQuery.txtContentB = txtContentB.Text.TrimeGroupQuery.txtContentC = txtContentC.Text.TrimeGroupQuery.GetTable = tablename()Dim BGroupQuery As New GroupQueryBLLDim dt As DataTableCall DView(eGroupQuery)End Sub'定义虚函数,获取不同数据库表中的字段名Protected Overridable Function GetDBName(ByVal Str As String) As StringReturn ""End Function'定义虚函数,获取不同数据库表名Protected Overridable Function tablename() As StringReturn ""End FunctionProtected Overridable Sub DView(ByVal eGroupQuery As EGroupQuery)End SubPrivate Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.ClickMe.Close()End SubPrivate Sub cboRelationA_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRelationA.SelectedIndexChangedIf cboRelationA.Text <> "" ThencboFieldB.Enabled = TruecboOperatorB.Enabled = TruetxtContentB.Enabled = TruecboRelationB.Enabled = TrueEnd IfEnd SubPrivate Sub cboRelationB_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRelationB.SelectedIndexChangedIf cboRelationB.Text <> "" ThencboFieldC.Enabled = TruecboOperatorC.Enabled = TruetxtContentC.Enabled = TrueEnd If       End SubProtected Sub from1_Load(sender As Object, e As EventArgs) Handles MyBase.Load'加载窗体控件的名称eGroupQuery.cboFieldA = ""eGroupQuery.cboFieldB = ""eGroupQuery.cboFieldC = ""cboOperatorA.Items.Add("<")cboOperatorA.Items.Add(">")cboOperatorB.Items.Add("<")cboOperatorB.Items.Add(">")cboOperatorC.Items.Add("<")cboOperatorC.Items.Add(">")cboRelationA.Items.Add("与")cboRelationA.Items.Add("或")cboRelationB.Items.Add("与")cboRelationB.Items.Add("或")cboFieldB.Enabled = FalsecboOperatorB.Enabled = FalsetxtContentB.Enabled = FalsecboRelationB.Enabled = FalsecboFieldC.Enabled = FalsecboOperatorC.Enabled = FalsetxtContentC.Enabled = FalseEnd SubPrivate Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.ClickCall Rdim()If AllEmpty(arrayControl) ThenExit SubEnd IfDGV.DataSource = NothingEnd SubPrivate Sub Rdim()'Dim arrayControl() As Windows.Forms.ControlReDim Preserve arrayControl(9)arrayControl(0) = New Term(txtContentA, "要查询的内容")arrayControl(1) = New Term(txtContentB, "要查询的内容")arrayControl(2) = New Term(txtContentC, "要查询的内容")arrayControl(3) = New Term(cboFieldA, "选择字段")arrayControl(4) = New Term(cboFieldB, "选择字段")arrayControl(5) = New Term(cboFieldC, "选择字段")arrayControl(6) = New Term(cboOperatorA, "选择操作符")arrayControl(7) = New Term(cboOperatorB, "选择操作符")arrayControl(8) = New Term(cboOperatorC, "选择操作符")End Sub
End Class
           这仅仅是UI层中的代码,其他层的代码就不一一展示了,实在还有不理解者大可参考其他人士的代码。与此同理,我们的子类窗体的代码就大大减少了


多看你一眼___建造者模式

           建造者模式(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)
题外话:在我校食堂和大神吃饭的时候,大神问:看人吃热干面,我也想吃,不知道好不好?我来了一句:那决定与拌热干面的师傅了,他心情好估计就好吃,心情不好的话…咳咳,我就吃了几次,味道不一样的。然后大神说:你说,这不是咱学过的那个设计模式来着?“是……命令?”“是……什么来这……

           就这样小编再次翻开《大话设计模式》,越看越有意思,越看越和模板方法有的一拼

建造者模式同样体现着模板方法,因为Builder类中定义好了ConcreteBuilder必须要重写或要有的方法也就是说Builder中已定义好了要有的方法,这些方法可以在Builder类中实现,也可以把它推迟到子类中实现。模板方法中Abstract2类的重要函数TemplateMethod与建造者模式中的Director类中的函数Build相似,都是定义了方法的执行的骨架。(本内容最好对照《大话设计模式》课本)
           它们究竟还有什么不同呢?小编认为,在实现方法的骨架层次上,建造者模式中使用的是组合的方式,而模板方法模式采用的是继承的方式,我们都知道,组合优于继承,所以我认为建造者更灵活,而且也可以避免由继承而引发的各种问题,如代码膨涨,责任过大,难以维护等。

 

         学习是……相互关联的

 





这篇关于模板方法模式——【VB.NET机房收费系统(组合查询)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978131

相关文章

C++的模板(八):子系统

平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。 但这不是唯一的用法。试想一下。如果在模板内限制调用参数类型的构造函数会发生什么?参数类的对象在模板内无法构造。他们只能从模板的成员函数传入。模板不保存这些对象或者只保存他们的指针。因为构造函数被分离,这些指针在模板外

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

房产证 不动产查询

陕西政务服务网(便民服务)陕西政务服务网(手机版?更直观)不动产权证书|不动产登记证明(电子证照)商品房合同备案查询权利人查询

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser