21xrx.com
2024-11-08 21:17:05 Friday
登录
文章检索 我的文章 写文章
C++常用设计模式详解
2023-07-02 07:00:08 深夜i     --     --
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++中的几个常见设计模式,包括单例模式、工厂模式和观察者模式。希望这些示例代码能够帮助读者更好地理解设计模式的概念和用法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复