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

我的設計模式之旅[3]:Strategy Pattern 傳遞完整物件解決需求變更 (C++)

     編輯:關於C語言

系列第三篇的起點:需求變更要求 Grapher 能在各形狀中印出文字。若直接修改 IShape::draw(const char*),未來若需繪製圖片而非文字,介面又得再改。為一勞永逸,決定將整個 Grapher 物件(*this)傳給策略,讓策略自行取所需資料。

演進過程

  1. 初版:virtual void draw(const char *text) const = 0; — 僅支援文字,擴充性差。
  2. 改良版:virtual void draw(Grapher &grapher) const = 0; — 傳遞完整物件,策略可呼叫 grapher.getText() 或未來任何公開方法。

關鍵程式碼片段

class IShape {
public:
    virtual void draw(Grapher &grapher) const = 0;
};

void Grapher::drawShape() {
    this->shape->draw(*this);  // 傳遞 this 指標
}

此設計奠定後續引入 Template 進行泛型化的基礎,解決策略與特定 Context 類別緊耦合的問題。

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