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,子类公共的算法应该放在一个公共的类中 

  • 相关阅读:
    【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素
    [转]ASP.NET MVC 5
    [转]ASP.NET MVC 5 学习教程:快速入门
    Using XSLT and Open XML to Create a Word 2007 Document
    如何在VS2010中更好的编写JavaScript代码
    [转]这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)
    [转]C# 超高速高性能写日志 代码开源
    windows 2003 发布遇到问题---分析器错误消息: 未能加载类型“YWPT.MvcApplication”。
    将Oracle数据库转换为SQL Server
    SQLServer2008导出表数据为SQL脚本
  • 原文地址:https://www.cnblogs.com/luozhai714/p/729598.html
Copyright © 2011-2022 走看看