卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章64458本站已运行4117

探索 C++ 设计模式的常见类型和应用

问题: c++++ 中常见的有哪些设计模式及其应用?答案:创建型模式:工厂方法:简化对象创建。单例:确保一个类只有一个实例。结构型模式:适配器:兼容不兼容的接口。装饰器:动态扩展对象功能。行为型模式:观察者:自动通知观察者对象状态更改。策略:动态选择和切换算法。

探索 C++ 设计模式的常见类型和应用

探索 C++ 设计模式的常见类型和应用

设计模式是软件开发中的可重用解决方案,可在不同情况下解决常见问题。了解并应用设计模式对编写健壮、灵活和可维护的 C++ 代码至关重要。

常见 C++ 设计模式类型

立即学习“C++免费学习笔记(深入)”;

创建型模式

  • 工厂方法:创建对象的工厂接口,而不是显式指定创建类。
  • 单例:确保特定类仅有一个实例存在。

结构型模式

  • 适配器:使两个不兼容的接口能够一起工作。
  • 装饰器:动态地给对象添加额外的功能。

行为型模式

  • 观察者:当一个对象的状态发生更改时,通知多个观察者。
  • 策略:将不同算法封装为独立的类,以便在运行时动态选择和切换它们。

实战案例

工厂方法模式

class ShapeFactory {
public:
    virtual Shape* createShape(ShapeType type) = 0;
};

class RectangleFactory : public ShapeFactory {
public:
    Shape* createShape(ShapeType type) override {
        return new Rectangle();
    }
};

class CircleFactory : public ShapeFactory {
public:
    Shape* createShape(ShapeType type) override {
        return new Circle();
    }
};

int main() {
    ShapeFactory* shapeFactory = new RectangleFactory();
    Shape* shape = shapeFactory->createShape(RECTANGLE); // 创建一个矩形
    return 0;
}

观察者模式

class Subject {
public:
    virtual void registerObserver(Observer* observer) = 0;
    virtual void removeObserver(Observer* observer) = 0;
    virtual void notifyObservers() = 0;
};

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

    void removeObserver(Observer* observer) override {
        observers.erase(find(observers.begin(), observers.end(), observer));
    }

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

private:
    vector<Observer*> observers;
};

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

class ConcreteObserverA : public Observer {
public:
    void update() override {
        cout << "ObserverA updated." << endl;
    }
};

int main() {
    ConcreteSubject subject;
    ConcreteObserverA observerA;
    subject.registerObserver(&observerA);
    subject.notifyObservers(); // 通知所有已注册的观察者
    return 0;
}
卓越飞翔博客
上一篇: 使用 Golang 框架开发 Web 应用的最佳实践
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏