当前位置:首页 > 芯闻号 > 充电吧
[导读]模版方法中的方法可以分为两大类:模版方法(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;

        }

    }



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

作为一名数码爱好者,更是资深理工男,自然也对3D打印设备兴趣满满,正好看到全球消费级光固化3D打印第一品牌的ELEGOO爱乐酷推出了一款重磅新品,性能上也有非常多颠覆升级,便迫不及待入手一台感受一下。

关键字: 打印机

京元电子在重大讯息说明会中宣布,将出售持有苏州子公司京隆科技 92.1619% 的股权,预估交易金额约 48.85 亿人民币,将于第三季度完成交易,届时将退出中国大陆半导体制造业务。

关键字: 半导体制造 半导体封测 封装测试 京元电子

电子数据的存储与共享在我们生活中占据越来越重要的地位,而传统的硬盘存储已然难以满足人们日益增长的数据存储需求,为此网络附加存储(NAS)则以其便捷、高效的特点,逐渐受到广大用户的青睐。但是提到NAS,很多人可能会觉得它是...

关键字: 存储 铁威马NAS 硬盘存储

4月25日,以“分享鸿蒙技术特性,交流鸿蒙生态共建”为主题的HDD·行业沙龙在江西武功山成功举行。华为产品专家们现场带来了诸多精彩分享,吸引了来自政务、金融、新闻资讯等多个行业的四十余家软件服务商到场参加。

关键字: 鸿蒙 华为 智能设备

4月25日,2024(第十八届)北京国际汽车展览会拉开序幕,车展以“新时代·新汽车”为主题,一直持续到5月4日。本次车展将有全球首发车117台(其中跨国公司全球首发车30台),41款概念车及278款新能源车型展出。

关键字: 北京车展 新能源汽车 电动汽车

LED驱动模块RSC6218A 5W-18W迷你高效驱动电源应用,小功率、小体积、高效率

关键字: LED驱动模块 驱动电源应用 LED电源芯片

业内消息,近日台积电在北美技术研讨会上宣布,正在研发 CoWoS 封装技术的下个版本,可以让系统级封装(SiP)尺寸增大两倍以上,实现 120x120mm 的超大封装,功耗可以达到千瓦级别。

关键字: CoWoS 台积电 封装

据外媒报道,字节正在内部探索出售TikTok美国业务多数股权,并援引内部人士披露的信息称 “沃尔玛或为最理想买家”。报道还称,讨论中的一种情况是字节出售美国50%以上TikTok股份,但保留少数股权。

关键字: 字节跳动 TikTok

业内消息,HMD 正在计划重启一些经典的诺基亚功能手机。今年 3 月初,该公司预告了将于 5 月发布的一款功能手机。现在该机的身份已经曝光,新款诺基亚 3210 的谍照已经泄露,展现了新机部分新特性。

关键字: 诺基亚 功能机 HMD

业内消息,近日有一位网友在各大社交媒体发文表示,自己离职后,公司将自己所有的期权全部作废。

关键字: 期权 微博
关闭
关闭