当前位置:首页 > > 充电吧
[导读]模版方法中的方法可以分为两大类:模版方法(Template Method)和基本方法(Primitive Method)。  a.模版方法  一个模版方法是定义在抽象类中的,把基本操作方法组合在一起形

模版方法中的方法可以分为两大类:模版方法(Template Method)和基本方法(Primitive Method)。

  a.模版方法

  一个模版方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
这个模版方法一般会在抽象类中定义,并由子类不加以修改地完全继承下来。

  b.基本方法

  基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和
钩子方法(Hook Method)。

  抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在C#语言里一个抽象方法以abstract
关键字标示出来。

  具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。在C#语言里面,一个具体方法
没有abstract关键字。

  钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,
作为方法的默认实现。(Visual FoxPro中项目向导建立的项目会使用一个AppHook类实现监视项目成员变化,调整系统结构的工作。)钩子方法的名字通常以do开始。



下面讲解窗体基类的模板方法实现:

抽象方法必须定义在抽象类中(Abstract Class),在某些场合不一定使用抽象类,比如frmBase是个具体类,因此我将模板方法改为虚拟(Virtual)的。

        /// 

        /// 在基类定义查询数据的模板方法,由派生窗体实现具体的查询功能。

        /// 

        /// 

        protected virtual DataTable DoSearch()

        {

            return new DataTable(); //模板方法不能返回实际数据。

        }



派生类具体实现:


        //复写(Override)模板方法,具体实现

        protected override DataTable DoSearch()

        {

            return new BLL_Product().Search(txtProductCode.Text, txtProductName.Text);

        }



窗体基类界面:


public partial class frmBase : Form
{
   public frmBase()
   {
      InitializeComponent();
   }
   
   private void btnSearch_Click(object sender, EventArgs e)
   {
      //调用模板方法 
      DataTable data = this.DoSearch();
      
      if (data.Rows.Count > 0)
      this.dataGridView1.DataSource = data;
      else
      MessageBox.Show("没有找到数据!");
   }
   
   ///  
   ///  
   protected virtual DataTable DoSearch()
   {
      return new DataTable(); //模板方法不能返回实际数据。 
   }
   
}


派生一个产品定义窗体:



public partial class frmProduct : CSFramework.TemplateMethodDemo.frmBase
{
   public frmProduct()
   {
      InitializeComponent();
   }
   
   //复写(Override)模块方法,具体实现 
   protected override DataTable DoSearch()
   {
      return new BLL_Product().Search(txtProductCode.Text, txtProductName.Text);
   }
}


搜索功能在窗体基类实现了,我们只需要定义具体的数据查找方法。
通过重写DoSearch模块方法,从业务逻辑层返回数据。


/// 

    /// 业务逻辑层

    /// 

    public class BLL_Product

    {

        public DataTable Search(string productCode, string productName)

        {

            string where = " 1=1 ";

 

            if (!String.IsNullOrEmpty(productCode))

                where = where + " and ProductCode=’" + productCode + "’";

 

            if (!String.IsNullOrEmpty(productName)) //支持模糊查找

                where = where + " and ProductName like ’%" + productName + "%’";

 

            string sql = "select * from tb_Product where " + where;

            //从SQL Server 获取数据 ..........省略...........

            //

            //下面返回测试数据

            DataTable test = this.GetDemoData();//返回测试数据

            DataRow[] rows = test.Select(where);

 

            //克隆 System.Data.DataTable 的结构,包括所有 System.Data.DataTable 架构和约束。

            DataTable retTable = test.Clone();

            foreach (DataRow row in rows)

                retTable.ImportRow(row);

 

            return retTable;

        }

 

        /// 

        /// 构建测试数据表

        /// 

        /// 

        private DataTable GetDemoData()

        {

            DataTable dt = new DataTable();

            dt.Columns.Add("ProductCode", typeof(String));

            dt.Columns.Add("ProductName", typeof(String));

            dt.Columns.Add("Price", typeof(Decimal));

 

            dt.Rows.Add("001", "原创作品CD", 99);

            dt.Rows.Add("002", "Dev Express 9.2x Suit", 9960);

            dt.Rows.Add("003", "可口可乐", 1.90);

            dt.Rows.Add("004", "Engima CD", 269);

 

            return dt;

        }

    }



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭