首頁  >  文章  >  後端開發  >  C++類別設計中常用的設計模式有哪些?

C++類別設計中常用的設計模式有哪些?

WBOY
WBOY原創
2024-06-01 18:09:01791瀏覽

C++ 類別設計中常用的設計模式包括:單例模式:確保一個類別只有一個實例。工廠方法模式:建立物件而不指定具體類,允許子類別改變實例化過程。觀察者模式:定義物件間的一對多依賴,當一個物件改變時,其他依賴物件會收到通知並更新。

C++類別設計中常用的設計模式有哪些?

C++ 類別設計中常用的設計模式

#設計模式是軟體設計中常見問題的通用解決方案。它們提供了一種結構化和可重複使用的方法來建立軟體,從而提高了程式碼的可維護性、可擴展性和靈活性。

在 C++ 中,一些常用的設計模式包括:

單例模式

  • 意圖:確保一個類別只有一個實例,並提供全域存取點。
  • 範例程式碼:

    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;
    }

工廠方法模式

  • 意圖:建立物件而不指定其具體類,允許子類別改變實例化過程。
  • 範例程式碼:

    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();
      }
    };

觀察者模式

  • 意圖:定義一個物件間的一對多依賴,使得當一個物件發生改變時,所有依賴它的物件都會被通知並自動更新。
  • 範例程式碼:

    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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn