ホームページ  >  記事  >  バックエンド開発  >  C++ クラス設計で一般的に使用される設計パターンは何ですか?

C++ クラス設計で一般的に使用される設計パターンは何ですか?

WBOY
WBOYオリジナル
2024-06-01 18:09:01791ブラウズ

C++ クラス設計の一般的な設計パターンは次のとおりです。 シングルトン パターン: クラスにインスタンスが 1 つだけあることを確認します。ファクトリ メソッド パターン: 具象クラスを指定せずにオブジェクトを作成し、サブクラスがインスタンス化プロセスを変更できるようにします。オブザーバー パターン: オブジェクト間の 1 対多の依存関係を定義します。1 つのオブジェクトが変更されると、他の依存オブジェクトが通知を受け取り、更新されます。

C++ クラス設計で一般的に使用される設計パターンは何ですか?

C++ クラス設計で一般的に使用される設計パターン

設計パターンは、ソフトウェア設計における一般的な問題に対する普遍的な解決策です。ソフトウェアを構築するための構造化された再利用可能なアプローチを提供し、コードの保守性、拡張性、柔軟性を向上させます。

C++ では、一般的に使用されるデザイン パターンには次のものがあります。

シングルトン パターン

  • 目的: クラスにインスタンスが 1 つだけあることを確認し、グローバル アクセス ポイントを提供します。
  • サンプルコード:

    class Singleton {
    private:
      static Singleton* instance;
      Singleton();
    public:
      static Singleton* getInstance();
      void doSomething();
    };
    
    Singleton* Singleton::instance = nullptr;
    
    Singleton* Singleton::getInstance() {
      if (instance == nullptr) {
          instance = new Singleton();
      }
      return instance;
    }

Factory Method Pattern

  • 目的: 具体クラスを指定せずにオブジェクトを作成し、サブクラスがインスタンス化プロセスを変更できるようにします。
  • サンプルコード:

    class Product {
    public:
      virtual void operation() = 0;
    };
    
    class ConcreteProductA : public Product {
    public:
      void operation() override {
          // ...
      }
    };
    
    class ConcreteProductB : public Product {
    public:
      void operation() override {
          // ...
      }
    };
    
    class Factory {
    public:
      virtual Product* createProduct() = 0;
    };
    
    class ConcreteFactoryA : public Factory {
    public:
      Product* createProduct() override {
          return new ConcreteProductA();
      }
    };
    
    class ConcreteFactoryB : public Factory {
    public:
      Product* createProduct() override {
          return new ConcreteProductB();
      }
    };

Observer pattern

  • 目的: オブジェクトが変更されると、それに依存するすべてのオブジェクトが通知され、自動的に更新されるように、オブジェクト間の 1 対多の依存関係を定義します。
  • サンプルコード:

    class Observable {
    public:
      virtual void addObserver(Observer* observer) = 0;
      virtual void removeObserver(Observer* observer) = 0;
      virtual void notifyObservers() = 0;
    };
    
    class Observer {
    public:
      virtual void update(Observable* observable) = 0;
    };
    
    class ConcreteObservable : public Observable {
    private:
      std::vector<Observer*> observers;
    public:
      void addObserver(Observer* observer) override {
          observers.push_back(observer);
      }
      void removeObserver(Observer* observer) override {
          observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());
      }
      void notifyObservers() override {
          for (auto observer : observers) {
              observer->update(this);
          }
      }
      void doSomething() {
          // ...
          notifyObservers();
      }
    };
    
    class ConcreteObserverA : public Observer {
    public:
      void update(Observable* observable) override {
          // ...
      }
    };
    
    class ConcreteObserverB : public Observer {
    public:
      void update(Observable* observable) override {
          // ...
      }
    };

以上がC++ クラス設計で一般的に使用される設計パターンは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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