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