zoukankan      html  css  js  c++  java
  • Template Method Pattern 上海

    Template Method Pattern
     一,Define
          定义一个操作中算法的骨架(skeleton),以将一些步骤延缓到子类中实现。模版方法让子类重新定义一个算法的某些步骤而无须改变算法的结构。
     二,类和对象的关系
          1,AbstractClass
              定义一个抽象原始的操作(primitive operations),其子类可以重定义它实现一个算法的各个步骤。
              实现一个模版方法定义一个算法的骨架。此模版方法不仅可以调用原始的操作,还可以调用定义于AbstractClass中的方法或其他对象中的方法。
          2,ConnecreteClass
               实现原始的操作以完成子类特定算法的步骤。
             举个例子:
                     using System;
    using System.Data;
    using System.Data.SqlClient;
    namespace Template_Method
    {
        abstract class Dataobject
        {
            //Method
            abstract public void Connect();
            abstract public void Select();
            abstract public void Process();
            abstract public void Disconnect();
            // the Template Method
            public void Run()
            {
                Connect();
                Select();
                Process();
                Disconnect();
             
            }

        }
        class CustomerDataObject : Dataobject
        {
            private string connectionString = "Server=.;User ID=sa;password=sa;database=jxcbook; Connection Reset=FALSE";
            private string commandString;
            private DataSet dataset;
            private SqlConnection DataConnection;
            //
            public override void Connect()
            {
                DataConnection = new SqlConnection(connectionString);
                DataConnection.Open();
            }
            public override void Select()
            {
                commandString = "select top 5 * from 用户清单";
                SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, DataConnection);
                dataset = new DataSet();
                dataAdapter.Fill(dataset, "Customers");
            }
            public override void Process()
            {
                DataTable dataTable = dataset.Tables["Customers"];
                foreach (DataRow myRow in dataTable.Rows)
                {
                    foreach (DataColumn myCol in dataTable.Columns)
                        Console.WriteLine(myRow[myCol].ToString());

                }
            }
            public override void Disconnect()
            {
                dataset.Dispose();
                DataConnection.Close();
               
            }

        }
    }

       实现类
              class Program
        {
            static void Main(string[] args)
            {
                CustomerDataObject c = new CustomerDataObject();
                c.Run();
                Console.ReadLine();
            }
        }
     总结:摸版方法模式在一个类中形式化地定义算法,而由它的子类实现细节的处理。摸版方法模式的优势是,
             在子类定义处理算法时不会改变算法的结构。
            摸版方法的特点在于,每个不同的实现都需要定义一个子类,这也符合高内聚的责任分配的原则。
     推荐场景:
             1,将相同的算法放在一个类中,将算法变化的部分放在子类中的实现。
             2,子类公共的算法应该放在一个公共的类中 

  • 相关阅读:
    JavaScript Date对象和函数 (一)
    Css3 文字渐变整理(一)
    Asp.net Core CacheHelper 通用缓存帮助类
    .net core中使用GB2312编码的问题
    苹果手机微信浏览器select标签选择完成之后页面不会自动回到原位
    .Net Core NOPI操作word(二) 表格操作
    .Net Core NOPI操作word(一)
    .NetCore中EFCore的使用整理(三)-关联表操作
    windos server2012安装.net core 2.2问题
    C# 最简单的使程序单进程运行的方法
  • 原文地址:https://www.cnblogs.com/luozhai714/p/729598.html
Copyright © 2011-2022 走看看