21xrx.com
2025-03-28 00:06:24 Friday
文章检索 我的文章 写文章
C++常用设计模式详解
2023-07-02 07:00:08 深夜i     16     0
C++ 设计模式 常用 详解

设计模式是一种被广泛使用的软件设计方法,通过一些约束,使得开发者能够以一种突出的方式创建重复出现的设计问题。C++语言作为一个被大量使用的编程语言,也有许多常见的设计模式,接下来将详细介绍其中几个常见的设计模式。

1.单例模式

单例模式是一种只允许创建一个实例的模式,被广泛使用于管理全局配置或状态的情况下。如何在C++中实现单例模式?最好的方法是用一个类来存储实例,并将构造函数定义为私有。这就可以防止开发者直接使用new关键字来创建类的对象,而是采用类方法来访问实例。以下是一个简单的C++示例代码。

class Singleton {
public:
  // 访问实例的方法
  static Singleton& getInstance()
    static Singleton instance;
    return instance;
  
private:
  // 将构造函数定义为私有的,以防止外部代码调用new关键字来创建实例
  Singleton() {}
  Singleton(const Singleton&) = delete;
  Singleton& operator=(const Singleton&) = delete;
};

2.工厂模式

工厂模式是一种用于创建对象的方法,使得开发人员可以不必关心对象的创建过程,只需在应用程序中调用该工厂即可。C++中最常用的工厂模式是抽象工厂模式和工厂方法模式。抽象工厂模式是用于创建一组相关对象的方法,而工厂方法模式是用于创建单个对象的方法。以下是一个简单的C++示例代码,用于说明工厂方法模式。

// 基类
class Product {
public:
  virtual ~Product(){}
  virtual void use() = 0;
};
// 具体实现类
class ProductA : public Product {
public:
  virtual void use() override
    cout << "Product A in use." << endl;
  
};
class ProductB : public Product {
public:
  virtual void use() override
    cout << "Product B in use." << endl;
  
};
// 工厂类,负责生产对象
class Factory {
public:
  virtual ~Factory() {}
  virtual unique_ptr<Product> createProduct() = 0;
};
class FactoryA : public Factory {
public:
  virtual unique_ptr<Product> createProduct() {
    return make_unique<ProductA>();
  }
};
class FactoryB : public Factory {
public:
  virtual unique_ptr<Product> createProduct() {
    return make_unique<ProductB>();
  }
};
// 客户端代码
int main() {
  unique_ptr<Factory> factory = make_unique<FactoryA>();
  auto product = factory->createProduct();
  product->use();
}

3.观察者模式

观察者模式用于在对象之间建立发布/订阅关系,当被观察对象发生变化时,所有观察者将会收到通知。以下是一个简单的C++示例代码,用于说明观察者模式。

// 被观察对象基类
class Subject {
public:
  virtual ~Subject(){}
  virtual void add(Observer* observer) = 0;
  virtual void remove(Observer* observer) = 0;
  virtual void notify() = 0;
};
// 被观察对象具体实现
class ConcreteSubject : public Subject {
public:
  void add(Observer* observer) override {
    observers_.push_back(observer);
  }
  void remove(Observer* observer) override {
    observers_.erase(remove(observers_.begin(), observers_.end(), observer), observers_.end());
  }
  void notify() override {
    for (auto observer : observers_) {
      observer->update();
    }
  }
private:
  vector<Observer*> observers_;
};
// 观察者基类
class Observer {
public:
  virtual ~Observer(){}
  virtual void update() = 0;
};
// 观察者具体实现
class ConcreteObserver : public Observer {
public:
  ConcreteObserver(Subject& subject) : subject_(subject) {
    subject_.add(this);
  }
  virtual ~ConcreteObserver() {
    subject_.remove(this);
  }
  void update() override
    cout << "Observer gets notified." << endl;
  
private:
  Subject& subject_;
};
// 客户端代码
int main() {
  ConcreteSubject subject;
  ConcreteObserver observer(subject);
  subject.notify();
}

总之,设计模式是一种非常重要的软件设计方法,能够使开发人员快速地解决问题并减少代码重复。本文介绍了C++中的几个常见设计模式,包括单例模式、工厂模式和观察者模式。希望这些示例代码能够帮助读者更好地理解设计模式的概念和用法。

  
  

评论区