温馨提示×

C++ Cookbook中的设计模式解析

c++
小樊
82
2024-08-29 18:53:26
栏目: 编程语言

《C++ Cookbook》是一本关于C++编程的实用指南,其中包含了许多设计模式的实现方法

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。这在需要全局唯一资源或共享状态的场景中非常有用。
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):定义一个创建对象的接口,让子类决定实例化哪个类。这有助于解耦对象的创建和使用。
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):当一个对象的状态发生变化时,自动通知所有依赖于它的观察者。这有助于实现松耦合的系统。
#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):将一个类的接口转换成客户端期望的另一个接口。这有助于在不修改现有代码的情况下,使不兼容的接口能够一起工作。
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;
};

这些设计模式只是《C++ Cookbook》中的一部分内容,书中还包含了许多其他实用的C++编程技巧和最佳实践。如果你对这些设计模式感兴趣,可以考虑阅读这本书以获取更多详细信息和示例。

0