首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:模板方法模式完整指南(三)— 繼承濫用警示與資料庫存取實戰

     編輯:關於C語言

繼承濫用的三個認知階段

  1. 不知其一:初學者不知繼承,全靠委派復用
  2. 知其一、不知其二:發現繼承容易,到處濫用,將委派場景改為繼承
  3. 知其二:專家警告繼承濫用,甚至有語言移除繼承(如 SELF),提倡委派/組合替代

知其三:繼承不該被廢棄

  • 繼承是 OOP 四大特性之一(封裝、繼承、多態、抽象)
  • 因噎廢食不可取:繼承適合類型層級結構,利於理解、維護、擴展
  • GoF 模式多用繼承定義介面,模板方法更**鼓勵恰當使用繼承**
  • 將通用行為上移基類,特化行為下放子類

實戰:資料庫存取模板方法

需求:C 盤根目錄有 nwind.mdb(Access 北風資料庫)


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

// 抽象類別:定義演算法骨架
abstract class DataObject
{
    public abstract void Connect();
    public abstract void Select();
    public abstract void Process();
    public abstract void Disconnect();

    // 模板方法:固定流程
    public void Run()
    {
        Connect();
        Select();
        Process();
        Disconnect();
    }
}

// 具體類別:實作各步驟
class CustomerDataObject : DataObject
{
    private string connStr = "provider=Microsoft.JET.OLEDB.4.0; data source=c:\\nwind.mdb";
    private string cmdStr;
    private DataSet ds;

    public override void Connect() { /* OleDb 連線無需額外動作 */ }

    public override void Select()
    {
        cmdStr = "select CompanyName from Customers";
        OleDbDataAdapter da = new OleDbDataAdapter(cmdStr, connStr);
        ds = new DataSet();
        da.Fill(ds, "Customers");
    }

    public override void Process()
    {
        DataTable dt = ds.Tables["Customers"];
        foreach (DataRow row in dt.Rows)
            Console.WriteLine(row["CompanyName"]);
    }

    public override void Disconnect() { /* 連線池自動管理 */ }
}

// 客戶端
public class TemplateMethodApp
{
    public static void Main()
    {
        CustomerDataObject c = new CustomerDataObject();
        c.Run();  // 一鍵執行完整流程
    }
}

模式優勢展現

  • 流程固定:Run() 確保 Connect→Select→Process→Disconnect 順序不可變
  • 細節可變:不同資料表/資料庫只需建立新子類別實作四個步驟
  • 復用最大化:連線管理、流程控制集中在基類
  • 擴展容易:新增報表類別只需實作抽象方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved