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

我的 Design Pattern 之旅 [1]:Strategy Pattern (4) - C++ Function Pointer 實現

     編輯:關於C語言

Strategy Pattern ISO C++ Function Pointer 實現:最原始的策略替換機制

核心代碼


class Grapher {
public:
    typedef void (*pfDraw)();
    Grapher(pfDraw draw = 0) : _draw(draw) {}
    void drawShape() const { if (_draw) _draw(); }
    void setShape(pfDraw draw) { _draw = draw; }
protected: pfDraw _draw;
};

class Triangle { public: static void draw() { cout << "Draw Triangle" << endl; } };
class Circle { public: static void draw() { cout << "Draw Circle" << endl; } };
class Square { public: static void draw() { cout << "Draw Square" << endl; } };

int main() {
    Grapher grapher(Square::draw); grapher.drawShape();
    grapher.setShape(Circle::draw); grapher.drawShape();
}

執行結果


Draw Square
Draw Circle

本質:介面定義函數簽名 → 函數指標類型定義簽名。所有傳入函數必須符合指標類型。C++ 函數指標啟發 C# Delegate 實現 Strategy。

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