C++设计模式是一套被广泛认可的用于解决常见对象导向设计问题的最佳实践。设计模式可以帮助开发者编写更加清晰、可维护和可扩展的代码。设计模式通常分为三大类:创建型、结构型和行为型。下面,我将分别介绍这三类设计模式的概念、应用场景和C++实现示例。
创建型设计模式
创建型设计模式关注于对象的创建机制,帮助使系统独立于如何创建、组合和表示对象。
-
单例模式(Singleton)
- 概念:确保一个类只有一个实例,并提供一个全局访问点。
- 应用场景:当需要控制实例数目,节省系统资源的时候。
- 示例:
class Singleton { private:static Singleton* instance;Singleton() {} public:static Singleton* getInstance() {if (instance == nullptr) {instance = new Singleton();}return instance;} }; Singleton* Singleton::instance = nullptr;
-
工厂方法模式(Factory Method)
- 概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
- 应用场景:在编程时不知道最终需要创建的对象的具体类型。
- 示例:
class Product { public:virtual ~Product() {}virtual void Operation() = 0; };class ConcreteProductA : public Product { public:void Operation() override {// 实现代码} };class Creator { public:virtual ~Creator() {}virtual Product* FactoryMethod() = 0; };class ConcreteCreatorA : public Creator { public:Product* FactoryMethod() override {return new ConcreteProductA();} };
结构型设计模式
结构型设计模式关注于如何组合类和对象以获得更大的结构。
- 适配器模式(Adapter)
- 概念:允许将一个类的接口转换成客户期望的另一个接口。
- 应用场景:当需要使用现有的类,而其接口不符合你的需求时。
- 示例:
class Target { public:virtual ~Target() {}virtual void Request() = 0; };class Adaptee { public:void SpecificRequest() {// 特定请求} };class Adapter : public Target { private:Adaptee* adaptee; public:Adapter(Adaptee* a) : adaptee(a) {}void Request() override {adaptee->SpecificRequest();} };
行为型设计模式
行为型设计模式关注于对象之间的职责分配。
- 观察者模式(Observer)
- 概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
- 应用场景:当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象有待改变时。
- 示例:
class Observer { public:virtual ~Observer() {}virtual void Update(int) = 0; };class Subject { public:virtual ~Subject() {}virtual void Attach(Observer*) = 0;virtual void Detach(Observer*) = 0;virtual void Notify() = 0; };class ConcreteSubject : public Subject { private:std::list<Observer*> observers;int state; public:void Attach(Observer* o) override {observers.push_back(o);}void Detach(Observer* o) override {observers.remove(o);}void Notify() override {for (Observer* o : observers) {o->Update(state);}}void SetState(int value) {state = value;Notify();} };
这些设计模式是C++面向对象设计中的基石,通过它们可以创建灵活、可维护和可扩展的软件。理解和掌握这些模式对于高级C++开发者来说非常重要。