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

C# 設計模式:模板方法模式完整指南(二)— 結構性代碼與繼承復用辯證

     編輯:關於C語言

結構性示範代碼


using System;

// 抽象類別
abstract class AbstractClass
{
    public abstract void PrimitiveOperation1();
    public abstract void PrimitiveOperation2();

    // 模板方法
    public void TemplateMethod()
    {
        Console.WriteLine("In AbstractClass.TemplateMethod()");
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
}

// 具體類別
class ConcreteClass : AbstractClass
{
    public override void PrimitiveOperation1()
        => Console.WriteLine("Called ConcreteClass.PrimitiveOperation1()");

    public override void PrimitiveOperation2()
        => Console.WriteLine("Called ConcreteClass.PrimitiveOperation2()");
}

// 客戶端
public class Client
{
    public static void Main()
    {
        ConcreteClass c = new ConcreteClass();
        c.TemplateMethod();
    }
}

輸出結果

In AbstractClass.TemplateMethod()
Called ConcreteClass.PrimitiveOperation1()
Called ConcreteClass.PrimitiveOperation2()

繼承作為復用工具的辯證思考

不知其一:初學階段

  • 不理解繼承,視為高深工具
  • 主要靠委派/組合復用

知其一、不知其二:濫用階段

  • 發現繼承簡單且威力大(子類別立刻獲得基類行為)
  • 躍躍欲試,將原本適合委派的場合改用繼承
  • **繼承濫用風險**:破壞封裝、增加耦合、違反里氏替換原則

正確認知:繼承與委派的適用邊界

場景推薦方式理由
is-a 關係、共享核心流程、受控擴展點繼承 + 模板方法流程固定、細節可變、編譯時綁定
has-a 關係、行為需動態切換、多種組合委派/策略模式運行時綁定、組合靈活、符合合成復用原則

模板方法模式的定位

**恰當使用繼承的典範**:將可復用的一般性行為上移基類,特化行為下放子類。熟悉此模式 = 重新學會正確使用繼承。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved