惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
B
Blog
D
Docker
C
Check Point Blog
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
罗磊的独立博客
月光博客
月光博客
博客园 - Franky
L
LangChain Blog
H
Help Net Security
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
小众软件
小众软件
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 点点滴滴

C#操作IIS的代码 恢复误删数据(SQL Server 2000)--Log Explorer 如何让ClickOnce进行手动更新(含代码) - 点点滴滴 - 博客园 BackgroundWorker 组件 获取VS.NET 自带的数据库连接对话框的数据库连接 搜索一个局域网中所有的SQL Server服务器 Application.DoEvent() 在C#使用XML注释 用IDisposable接口释放.NET资源 正确的重载operator 很好的debug有理由不用吗 C#调用API访问其它进程 抽象 虚方法 接口 的区别 ASP.NET AJAX 路线图 ASP.NET AJAX 概述 安装ASP.NET AJAX Visitor Strategy State
Template Method
点点滴滴 · 2006-10-29 · via 博客园 - 点点滴滴

// Template Method pattern -- Real World example


using System;
using System.Data;
using System.Data.OleDb;

namespace DoFactory.GangOfFour.Template.RealWorld
{
  
  // MainApp test application

class MainApp
  {
    static void Main()
    {
      DataAccessObject dao;
      
      dao = new Categories();
      dao.Run();

      dao =

new Products();
      dao.Run();

// Wait for user
      Console.Read();
    }
  }

// "AbstractClass"

abstract class DataAccessObject
  {
    protected string connectionString;

protected DataSet dataSet;

public virtual void Connect()
    {
      // Make sure mdb is on c:\
      connectionString =
        "provider=Microsoft.JET.OLEDB.4.0; " +
        "data source=c:\\nwind.mdb";
    }

public abstract void Select();
    public abstract void Process();

public virtual void Disconnect()
    {
      connectionString = "";
    }

// The "Template Method"

public void Run()
    {
      Connect();
      Select();
      Process();
      Disconnect();
    }
  }

// "ConcreteClass"

class Categories : DataAccessObject
  {
    public override void Select()
    {
      string sql = "select CategoryName from Categories";
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(
        sql, connectionString);

      dataSet =

new DataSet();
      dataAdapter.Fill(dataSet, "Categories");
    }

public override void Process()
    {
      Console.WriteLine("Categories ---- ");
      
      DataTable dataTable = dataSet.Tables["Categories"];
      foreach (DataRow row in dataTable.Rows)
      {
        Console.WriteLine(row["CategoryName"]);
      }
      Console.WriteLine();
    }
  }

class Products : DataAccessObject
  {
    public override void Select()
    {
      string sql = "select ProductName from Products";
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(
        sql, connectionString);

      dataSet =

new DataSet();
      dataAdapter.Fill(dataSet, "Products");
    }

public override void Process()
    {
      Console.WriteLine("Products ---- ");
      DataTable dataTable = dataSet.Tables["Products"];
      foreach (DataRow row in dataTable.Rows)
      {
        Console.WriteLine(row["ProductName"]);
      }
      Console.WriteLine();
    }
  }
}