Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah corak reka bentuk yang biasa digunakan dalam reka bentuk kelas C++?

Apakah corak reka bentuk yang biasa digunakan dalam reka bentuk kelas C++?

WBOY
WBOYasal
2024-06-01 18:09:01837semak imbas

Corak reka bentuk biasa dalam reka bentuk kelas C++ termasuk: Corak Singleton: Pastikan kelas hanya mempunyai satu contoh. Corak Kaedah Kilang: Mencipta objek tanpa menentukan kelas konkrit, membenarkan subkelas menukar proses instantiasi. Corak pemerhati: Tentukan kebergantungan satu kepada banyak antara objek Apabila satu objek berubah, objek bergantung lain akan menerima pemberitahuan dan kemas kini.

Apakah corak reka bentuk yang biasa digunakan dalam reka bentuk kelas C++?

Corak reka bentuk yang biasa digunakan dalam reka bentuk kelas C++

Corak reka bentuk ialah penyelesaian universal kepada masalah biasa dalam reka bentuk perisian. Mereka menyediakan pendekatan berstruktur dan boleh diguna semula untuk membina perisian, meningkatkan kebolehselenggaraan kod, kebolehskalaan dan fleksibiliti.

Dalam C++, beberapa corak reka bentuk yang biasa digunakan termasuk:

Corak singleton

  • Niat: Memastikan kelas hanya mempunyai satu tika dan menyediakan titik akses global.
  • Contoh kod:

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

Corak Kaedah Kilang

  • Niat: Buat objek tanpa menyatakan kelas konkritnya, membenarkan subkelas mengubah proses instantiasi.
  • Contoh kod:

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

Corak pemerhati

  • Niat: Tentukan pergantungan satu-ke-banyak antara objek supaya apabila objek berubah, semua objek yang bergantung padanya diberitahu dan dikemas kini secara automatik.
  • Contoh kod:

    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 {
          // ...
      }
    };

Atas ialah kandungan terperinci Apakah corak reka bentuk yang biasa digunakan dalam reka bentuk kelas C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn