C++ Cookbook中的設(shè)計(jì)模式解析

c++
小樊
83
2024-08-29 18:53:26
欄目: 編程語言

《C++ Cookbook》是一本關(guān)于C++編程的實(shí)用指南,其中包含了許多設(shè)計(jì)模式的實(shí)現(xiàn)方法

  1. 單例模式(Singleton Pattern):確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)。這在需要全局唯一資源或共享狀態(tài)的場(chǎng)景中非常有用。
class Singleton {
public:
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }

    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

private:
    Singleton() {}
};
  1. 工廠模式(Factory Pattern):定義一個(gè)創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪個(gè)類。這有助于解耦對(duì)象的創(chuàng)建和使用。
class Product {
public:
    virtual void use() = 0;
};

class ConcreteProductA : public Product {
public:
    void use() override {
        // ...
    }
};

class ConcreteProductB : public Product {
public:
    void use() 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();
    }
};
  1. 觀察者模式(Observer Pattern):當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí),自動(dòng)通知所有依賴于它的觀察者。這有助于實(shí)現(xiàn)松耦合的系統(tǒng)。
#include<vector>
#include<algorithm>

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

class Subject {
public:
    void addObserver(Observer* observer) {
        observers.push_back(observer);
    }

    void removeObserver(Observer* observer) {
        observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());
    }

    void notifyObservers() {
        for (auto observer : observers) {
            observer->update();
        }
    }

private:
    std::vector<Observer*> observers;
};
  1. 適配器模式(Adapter Pattern):將一個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口。這有助于在不修改現(xiàn)有代碼的情況下,使不兼容的接口能夠一起工作。
class Target {
public:
    virtual void request() = 0;
};

class Adaptee {
public:
    void specificRequest() {
        // ...
    }
};

class Adapter : public Target {
public:
    void request() override {
        adaptee.specificRequest();
    }

private:
    Adaptee adaptee;
};

這些設(shè)計(jì)模式只是《C++ Cookbook》中的一部分內(nèi)容,書中還包含了許多其他實(shí)用的C++編程技巧和最佳實(shí)踐。如果你對(duì)這些設(shè)計(jì)模式感興趣,可以考慮閱讀這本書以獲取更多詳細(xì)信息和示例。

0