模板模式

看到有博主说,如果你只想掌握一种设计模式,那一定是模板模式,可见这个模式,很好用啊。模板模式定义了整体的操作流程,而不需要指定具体的代码逻辑,讲这些代码逻辑放到子类中去实现,自己作为抽象方法来代替,保证了主体。

 

比如对数据库进行操作的时候,无论如何操作,大致步骤都为1.连接 2.执行数据库语句 3.将执行(如果为查询的话)后的数据展示出来 4.断开连接

再比如玩游戏的时候,大致步骤总是:1.初始化游戏 2.开始游戏 3.游戏中 4.结束游戏 

对于上方提到的例子,都有一个共同点,内部无论是SQL语句的书写,还是游戏的内容与过程都无法固定,但是操作的流程正如上方所示,如果每执行一次就从头写一遍整个过程,显然代码重复太多,后期维护也自己观察也闹心,模板模式就给了一种良好的解决方案。

   //最好使用protected,让继承的类内部可访问,而实例出来的无法调用(因为我们需要他调用模板即可,不要随意,形成规范)
    public abstract class DataAccessObject
    {
        protected string connectionString;
        protected DataSet ds ;
        protected string _selectSQl;
        //有默认实现给virtual,都需要子类实现给abstract
        protected virtual void Connect()
        {
            Console.WriteLine("设置连接");
            connectionString = "Server=.;User Id=sa;Password=;Database=Northwind"; 
        }
        protected abstract void Select(string selectSQl);//查询
        protected abstract void Display();//展示
        protected virtual void Disconnect()
        {
            Console.WriteLine("断开连接");
            connectionString="";
        }
        public void Run()
        {
            Connect();
            Select(_selectSQl);
            Display();
            Disconnect();
        }
    }
  #region 具体实用类
    class Categories : DataAccessObject
    {
        protected override void Select(string selectSQl)
        {
            Console.WriteLine("执行Select");
            //_selectSQl = selectSQl;
            //SqlDataAdapter sqldataadapter = new SqlDataAdapter(_selectSQl,connectionString);
            //ds = new DataSet();
            //sqldataadapter.Fill(ds);
        }
        protected override void Display()
        {
            Console.WriteLine("执行Display");
            //DataTable dataTable = ds.Tables["table1"];
            //foreach (DataRow row in dataTable.Rows)
            //{
            //    Console.WriteLine(row["CategoryName"].ToString());
            //}
        }
        
    }
    #endregion
 static void Main(string[] args)
        {
            DataAccessObject dao1 = new Categories();
            dao1.Run();
            Console.ReadKey();
        }

 

 

 

 

就是定义主体步骤,但是各个步骤逻辑由子类实现!这就是模板模式!

posted @ 2020-01-15 21:25  程序杰杰  阅读(136)  评论(0编辑  收藏  举报