• 模板模式


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

    比如对数据库进行操作的时候,无论如何操作,大致步骤都为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();
            }

     

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

  • 相关阅读:
    Activity 生命周期
    Java 单列模式(Singleton)
    Android SQLiteOpenHelper(二)
    Android SQLiteOpenHelper(一)
    Android Listview & Adapter
    Android 微信UI 、点击操作
    Android RadioGroup 及资源文件 & selector
    Java中&与&&的区别
    android几种定时器机制及区别(转载整理)
    Java 之 Date 和 Calendar 实例
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12198857.html
Copyright © 2020-2023  润新知