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

        }

    }



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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭