C++设计模式进阶教程:实战与优化
在掌握了C++设计模式的基础知识后,进一步深入理解和应用这些模式是提升编程能力的关键。本文将带你走进C++设计模式的进阶世界,通过实战案例和优化技巧,帮助你更好地运用这些模式解决复杂问题。

一、回顾设计模式
设计模式是解决特定问题的经典解决方案,分为创建型、结构型和行为型三大类。常见的模式如单例、工厂、装饰器、观察者等,各有其独特应用场景。
1.1 单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点。其经典实现如下:
class Singleton {
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
1.2 工厂模式
工厂模式用于创建对象,但无需指定具体类。以下是一个简单工厂模式的示例:
class Product {
public:
virtual void use() = 0;
};
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Using Product A" << std::endl;
}
};
class Factory {
public:
static Product* createProduct(const std::string& type) {
if (type == "A") {
return new ConcreteProductA();
}
return nullptr;
}
};
二、进阶实战案例
2.1 装饰器模式优化日志系统
装饰器模式允许动态地给对象添加额外的职责。以下是一个优化日志系统的案例:
class Logger {
public:
virtual void log(const std::string& message) = 0;
};
class ConsoleLogger : public Logger {
public:
void log(const std::string& message) override {
std::cout << "Console: " << message << std::endl;
}
};
class LoggerDecorator : public Logger {
protected:
Logger* logger;
public:
LoggerDecorator(Logger* logger) : logger(logger) {}
void log(const std::string& message) override {
logger->log(message);
}
};
class TimestampLogger : public LoggerDecorator {
public:
TimestampLogger(Logger* logger) : LoggerDecorator(logger) {}
void log(const std::string& message) override {
std::time_t now = std::time(0);
logger->log(std::ctime(&now) + message);
}
};
int main() {
Logger* logger = new TimestampLogger(new ConsoleLogger());
logger->log("This is a log message");
delete logger;
return 0;
}
2.2 观察者模式实现事件监听
观察者模式允许对象在状态变化时通知其他对象。以下是一个事件监听系统的实现:
class Observer {
public:
virtual void update(const std::string& event) = 0;
};
class ConcreteObserver : public Observer {
public:
void update(const std::string& event) override {
std::cout << "Received event: " << event << std::endl;
}
};
class Subject {
private:
std::vector<Observer*> observers;
public:
void addObserver(Observer* observer) {
observers.push_back(observer);
}
void notify(const std::string& event) {
for (Observer* observer : observers) {
observer->update(event);
}
}
};
int main() {
Subject subject;
ConcreteObserver observer1, observer2;
subject.addObserver(&observer1);
subject.addObserver(&observer2);
subject.notify("Event occurred");
return 0;
}
三、优化技巧
3.1 使用智能指针管理资源
在C++中,使用智能指针如std::unique_ptr和std::shared_ptr可以有效避免内存泄漏。
std::unique_ptr<Logger> logger = std::make_unique<TimestampLogger>(std::make_unique<ConsoleLogger>());
logger->log("This is a log message");
3.2 利用模板提高代码复用性
模板可以使代码更加通用,减少重复编写。
template<typename T>
class Factory {
public:
static std::unique_ptr<T> createProduct() {
return std::make_unique<T>();
}
};
四、总结
通过本文的进阶教程,你不仅复习了常见的设计模式,还学习了如何在实际项目中应用和优化这些模式。掌握这些技巧,将使你的C++编程能力更上一层楼。继续实践,不断探索,设计模式的世界将为你打开更多可能。
« 上一篇
C++模板元编程进阶探秘
下一篇 »
C++软件架构与设计:构建高效系统的艺术