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

我的 Design Pattern 之旅 [1]:Strategy Pattern (6) - C++ Template 實現

     編輯:關於C語言

Strategy Pattern ISO C++ Template 實現:編譯期多態與零開銷抽象

核心代碼


template 
class Grapher {
private: T _drawTemplate;
public: void drawShape() const { _drawTemplate.draw(); }
};

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

int main() {
    Grapher grapher; grapher.drawShape();
    Grapher grapher2; grapher2.drawShape();
}

執行結果


Draw Square
Draw Circle

三種實現對比

特性OOP StrategyC++ TemplateC# Generics
多態時機運行期 (動態繫結)編譯期 (靜態繫結)編譯期 (靜態繫結)
介面需求需要介面不需要 (鴨子類型)需要介面約束
運行期變換支援不支援不支援
程式碼膨脹無有 (每種類型實例化)有 (每種類型實例化)
指標/引用需要 (多態)物件而非指標物件而非指標

C# 2.0 引入泛型後,同樣可用 Generics 實現 Strategy Pattern (見前文)。

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