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

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

C++框架设计模式深入解析

c++++ 框架设计模式可分为工厂模式、单例模式、观察者模式:工厂模式:创建对象的实例,而无需特定类依赖;单例模式:确保类只有一个实例;观察者模式:建立对象与依赖对象事件之间的通信。

C++框架设计模式深入解析

C++ 框架设计模式深入解析

简介

设计模式是一种经过验证的解决常见编程问题的解决方案。它们为代码的可维护性、可扩展性和可复用性提供了基础。在 C++ 框架中,设计模式广泛用于组织和构建应用程序组件。本文将深入探究 C++ 框架中最常见的几种设计模式,并通过实际案例进行说明。

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

工厂模式

工厂模式用于创建对象的实例,而无需依赖具体的类。这提供了灵活性,允许应用程序根据配置或运行时条件动态创建不同的对象。

代码示例:

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

class CircleFactory : public ShapeFactory {
public:
    CircleFactory() {}
    Shape* createShape(const string& type) {
        if (type == "CIRCLE") {
            return new Circle();
        } else {
            throw invalid_argument("Invalid shape type");
        }
    }
};

class RectangleFactory : public ShapeFactory {
public:
    RectangleFactory() {}
    Shape* createShape(const string& type) {
        if (type == "RECTANGLE") {
            return new Rectangle();
        } else {
            throw invalid_argument("Invalid shape type");
        }
    }
};

int main() {
    ShapeFactory* factory = new CircleFactory();
    Shape* circle = factory->createShape("CIRCLE");
    delete factory;
    
    factory = new RectangleFactory();
    Shape* rectangle = factory->createShape("RECTANGLE");
    delete factory;
}

单例模式

单例模式确保一个类只有一个实例。这对于共享全局状态或初始化昂贵的对象非常有用。

代码示例:

class DatabaseConnection {
private:
    DatabaseConnection() {}
    static DatabaseConnection* instance;

public:
    static DatabaseConnection* getInstance() {
        if (instance == nullptr) {
            // 线程安全地创建实例
            lock_guard<mutex> lock(mtx);
            instance = new DatabaseConnection();
        }

        return instance;
    }

    void connect() {
        // 实现数据库连接逻辑
    }
};

DatabaseConnection* DatabaseConnection::instance = nullptr;

int main() {
    DatabaseConnection* db = DatabaseConnection::getInstance();
    db->connect();
}

观察者模式

观察者模式用于建立对象与依赖对象的事件之间的通信。当对象的状态发生变化时,它会通知其观察者。

代码示例:

class Subject {
public:
    vector<Observer*> observers;

    void attach(Observer* observer) {
        observers.push_back(observer);
    }

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

    void notify() {
        for (Observer* observer : observers) {
            observer->update();
        }
    }
};

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

class ConcreteObserverA : public Observer {
public:
    void update() {
        // 实现更新逻辑
    }
};

class ConcreteObserverB : public Observer {
public:
    void update() {
        // 实现更新逻辑
    }
};

int main() {
    Subject* subject = new Subject();
    Observer* observerA = new ConcreteObserverA();
    Observer* observerB = new ConcreteObserverB();

    subject->attach(observerA);
    subject->attach(observerB);

    subject->notify();

    delete subject;
    delete observerA;
    delete observerB;
}

结论

设计模式在 C++ 框架中扮演着至关重要的角色。理解和应用这些模式可以显著提高应用程序的质量和可维护性。本文探讨了几种常见的设计模式,通过实际案例说明了它们的用途和实现。

卓越飞翔博客
上一篇: C++框架未来趋势及发展方向
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏