ホームページ  >  記事  >  バックエンド開発  >  組み込みシステム用の C++ 設計パターンとは何ですか?

組み込みシステム用の C++ 設計パターンとは何ですか?

WBOY
WBOYオリジナル
2024-06-02 22:24:59821ブラウズ

組み込み C++ 設計パターンを使用して、リソースに制約のある環境に適した、効率的で信頼性の高いコードを作成できます。 シングルトン パターン: リソースの管理に使用される特定のクラスのインスタンスが 1 つだけであることを保証します。オブザーバー パターン: オブジェクトが他のオブジェクトをサブスクライブし、状態変化の通知を受信できるようにします。ファクトリ メソッド パターン: 正確なクラスを指定せずに、型に基づいてオブジェクトを作成します。実際のケース: タスク スケジューリング システムは、これらのモードを使用して効率的なタスク スケジューリングを実現し、主要なタスクの信頼性の高い実行を保証します。

組み込みシステム用の C++ 設計パターンとは何ですか?

組み込みシステム用の C++ デザイン パターン

はじめに

組み込みシステムは通常、リソースに制約のある環境で実行され、効率的で信頼性が高い必要があります。 C++ デザイン パターンは、エンジニアが簡潔で保守可能、スケーラブルな組み込みコードを作成するのに役立ちます。

組み込みシステム用の C++ デザイン パターン

シングルトン パターン: リソースの管理に使用できる、アプリケーション内に指定されたクラスのインスタンスが 1 つだけ存在することを保証します。

class Singleton {
private:
    Singleton() {}  // 私有构造函数,防止直接创建
    static Singleton* instance_;

public:
    static Singleton* getInstance() {
        if (!instance_) {
            instance_ = new Singleton;
        }
        return instance_;
    }
};

オブザーバー パターン: オブジェクトが他のオブジェクトをサブスクライブし、その状態変更の通知を受信できるようにします。

class Observable {
private:
    std::vector<Observer*> observers_;

public:
    void attach(Observer* observer) { observers_.push_back(observer); }
    void detach(Observer* observer) { observers_.erase(std::remove(observers_.begin(), observers_.end(), observer)); }
    void notify() {
        for (auto& observer : observers_) {
            observer->update();
        }
    }
};

class Observer {
public:
    virtual void update() = 0;
};

class ConcreteObserver1 : public Observer {
public:
    void update() { std::cout << "ConcreteObserver1: Received update." << std::endl; }
};

ファクトリ メソッド パターン: 正確なクラスを指定せずに、オブジェクトの具象実装を作成します。

class Shape {
public:
    virtual double getArea() = 0;
    virtual double getPerimeter() = 0;
};

class Circle : public Shape {
public:
    double getArea() override { return 3.14 * radius_; }
    double getPerimeter() override { return 2 * 3.14 * radius_; }

private:
    double radius_;
};

class Square : public Shape {
public:
    double getArea() override { return side_ * side_; }
    double getPerimeter() override { return 4 * side_; }

private:
    double side_;
};

class ShapeFactory {
public:
    static Shape* createShape(std::string type, double dimension) {
        if (type == "Circle") {
            return new Circle(dimension);
        } else if (type == "Square") {
            return new Square(dimension);
        } else {
            return nullptr;
        }
    }
};

int main() {
    Shape* circle = ShapeFactory::createShape("Circle", 5);
    std::cout << "Circle area: " << circle->getArea() << std::endl;
    Shape* square = ShapeFactory::createShape("Square", 3);
    std::cout << "Square area: " << square->getArea() << std::endl;
    return 0;
}

実践例: タスク スケジューリング システム

リソースに制約のある組み込みシステムにタスク スケジューラを実装する場合、デザイン パターンを活用できます。このシステムには、タスク、タスク キュー、スケジューラが含まれています:

  • シングルトン モード: タスク キューとスケジューラの管理に使用され、タスクの実行を制御する単一のエンティティが保証されます。
  • オブザーバー パターン: タスクはシングルトン スケジューラーをサブスクライブして、スケジュール変更の通知を受け取ります。
  • ファクトリメソッドパターン: タスクタイプに基づいて特定のタスクオブジェクトを作成します。

これらの設計パターンを採用することで、効率的で堅牢かつスケーラブルなタスク スケジューリング システムを作成し、組み込みシステムで重要なタスクを確実に実行できます。

以上が組み込みシステム用の C++ 設計パターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。