当前位置: 首页 > wzjs >正文

广东省医院建设协会网站首页广告推广免费平台

广东省医院建设协会网站首页,广告推广免费平台,电子商务网站的开发语言,appui设计公司在C中,设计模式(Design Patterns)是用于解决在软件设计中经常遇到的一些通用问题的最佳实践。这些设计模式是在多年的软件开发过程中积累下来的经验和智慧的结晶。它们可以帮助开发者设计出更加灵活、可维护、可扩展的软件系统。以下是一些在…

在C++中,设计模式(Design Patterns)是用于解决在软件设计中经常遇到的一些通用问题的最佳实践。这些设计模式是在多年的软件开发过程中积累下来的经验和智慧的结晶。它们可以帮助开发者设计出更加灵活、可维护、可扩展的软件系统。以下是一些在C++中常用的设计模式,详细见22种设计模式。

1、单例模式(Singleton Pattern):
确保一个类只有一个实例,并提供一个全局访问点。

class Singleton {  
private:  static Singleton* instance;  Singleton() {}  Singleton(const Singleton&) = delete;  Singleton& operator=(const Singleton&) = delete;  
public:  static Singleton* getInstance() {  if (!instance) {  instance = new Singleton();  }  return instance;  }  // ... 其他成员函数 ...  
};  Singleton* Singleton::instance = nullptr;

注意:上述这种写法并非线程安全的,为了保证单例的线程安全,有以下几种方式:

饿汉式(立即初始化):

class Singleton {  
public:  static Singleton& getInstance() {  return instance;  }  Singleton(const Singleton&) = delete;  Singleton& operator=(const Singleton&) = delete;  private:  Singleton() {}  static Singleton instance; // 静态局部变量,在类加载时初始化  
};  Singleton Singleton::instance; // 静态成员变量在类外初始化

懒汉式(双重检查锁):

class Singleton {  
public:  static Singleton& getInstance() {  if (instance == nullptr) { // 第一次检查  std::lock_guard<std::mutex> lock(mutex); // 加锁  if (instance == nullptr) { // 第二次检查  instance = new Singleton();  }  }  return *instance;  }  Singleton(const Singleton&) = delete;  Singleton& operator=(const Singleton&) = delete;  private:  Singleton() {}  static Singleton* instance;  static std::mutex mutex; // 用于同步的互斥量  
};  Singleton* Singleton::instance = nullptr;  
std::mutex Singleton::mutex;

静态内部类(C++11以后推荐):

class Singleton {  
public:  static Singleton& getInstance() {  return SingletonHolder::instance;  }  Singleton(const Singleton&) = delete;  Singleton& operator=(const Singleton&) = delete;  private:  Singleton() {}  struct SingletonHolder {  static Singleton instance;  };  static SingletonHolder holder; // 静态成员变量,保证在第一次调用getInstance时初始化  
};  Singleton::SingletonHolder Singleton::holder; // 静态成员变量在类外初始化  
Singleton Singleton::SingletonHolder::instance; // 静态局部对象,在holder初始化时初始化

2、工厂模式(Factory Pattern):
用于封装对象的创建过程,隐藏创建细节,使得代码更加灵活和可扩展。工厂模式主要分三种:简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式:

// 产品接口  
class Product {  
public:  virtual ~Product() {}  virtual void use() = 0;  
};  // 产品实现  
class ProductA : public Product {  
public:  void use() override {  std::cout << "Using ProductA" << std::endl;  }  
};  class ProductB : public Product {  
public:  void use() override {  std::cout << "Using ProductB" << std::endl;  }  
};  // 简单工厂类  
class SimpleFactory {  
public:  static Product* createProduct(const std::string& type) {  if (type == "A") {  return new ProductA();  } else if (type == "B") {  return new ProductB();  }  return nullptr;  }  
};  // 客户端代码  
int main() {  Product* productA = SimpleFactory::createProduct("A");  if (productA) {  productA->use();  delete productA;  }  Product* productB = SimpleFactory::createProduct("B");  if (productB) {  productB->use();  delete productB;  }  return 0;  
}

工厂方法模式:

// 产品接口  
class Product {  
public:  virtual ~Product() {}  virtual void use() = 0;  
};  // 产品实现  
class ProductA : public Product {  
public:  void use() override {  std::cout << "Using ProductA" << std::endl;  }  
};  class ProductB : public Product {  
public:  void use() override {  std::cout << "Using ProductB" << std::endl;  }  
};  // 工厂接口  
class Creator {  
public:  virtual ~Creator() {}  virtual Product* createProduct() = 0;  
};  // 工厂实现  
class CreatorA : public Creator {  
public:  Product* createProduct() override {  return new ProductA();  }  
};  class CreatorB : public Creator {  
public:  Product* createProduct() override {  return new ProductB();  }  
};  // 客户端代码  
int main() {  Creator* creatorA = new CreatorA();  Product* productA = creatorA->createProduct();  productA->use();  delete productA;  delete creatorA;  Creator* creatorB = new CreatorB();  Product* productB = creatorB->createProduct();  productB->use();  delete productB;  delete creatorB;  return 0;  
}

抽象工厂模式:

// 产品接口  
class ProductA {  
public:  virtual ~ProductA() {}  virtual void use() = 0;  
};  class ProductB {  
public:  virtual ~ProductB() {}  virtual void use() = 0;  
};  // 产品实现  
class ProductA1 : public ProductA {  
public:  void use() override {  std::cout << "Using ProductA1" << std::endl;  }  
};  class ProductB1 : public ProductB {  
public:  void use() override {  std::cout << "Using ProductB1" << std::endl;  }  
};  // 抽象工厂接口  
class AbstractFactory {  
public:  virtual ~AbstractFactory() {}  virtual ProductA* createProductA() = 0;  virtual ProductB* createProductB() = 0;  
};  // 工厂实现  
class Factory1 : public AbstractFactory {  
public:  ProductA* createProductA() override {  return new ProductA1();  }  ProductB* createProductB() override {  return new ProductB1();  }  
};  // 客户端代码  
int main() {  AbstractFactory* factory = new Factory1();  ProductA* productA = factory->createProductA();  ProductB* productB = factory->createProductB();  productA->use();  productB->use();

3、观察者模式(Observer Pattern):
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,它的所有依赖者(观察者)都会自动收到通知并更新。

class Subject {  // ...  std::list<Observer*> observers;  void notify() {  for (auto observer : observers) {  observer->update();  }  }  // ...  
};  class Observer {  
public:  virtual void update() = 0;  // ...  
};

4、建造者模式(Builder Pattern):
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

class Builder {  
public:  virtual void buildPartA() = 0;  virtual void buildPartB() = 0;  // ...  virtual Product* getResult() = 0;  
};  class ConcreteBuilder : public Builder {  Product* product;  // 实现构建过程  // ...  
};  class Director {  
public:  void construct(Builder* builder) {  builder->buildPartA();  builder->buildPartB();  // ...  }  
};

5、原型模式(Prototype Pattern):
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

class Prototype {  
public:  virtual Prototype* clone() = 0;  // ...  
};  class ConcretePrototype : public Prototype {  
public:  ConcretePrototype* clone() override {  return new ConcretePrototype(*this); // 拷贝构造函数实现克隆  }  // ...  
};

6、适配器模式(Adapter Pattern):
将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法一起工作的类能够一起工作。
7、迭代器模式(Iterator Pattern):
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
8、组合模式(Composite Pattern):
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
9、模板方法模式(Template Method Pattern):
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
10、策略模式(Strategy Pattern):
定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。


以上只是设计模式中的一部分,还有其他许多设计模式可以在C++中使用。学习和理解这些设计模式可以帮助你更好地设计出高质量的软件系统。

http://www.dtcms.com/wzjs/3349.html

相关文章:

  • 一键建站公司seo人工智能
  • 深圳品牌网站建设服务费用郑州seo外包阿亮
  • 网站建设立项报告软文写作技巧及范文
  • 受欢迎的南昌网站建设网站排名查询软件
  • 建一网站要多少钱品牌推广思路
  • 网站如何做下拉菜单陕西seo推广
  • html5 爱情网站模板市场调研问卷
  • 怎么看网站建设时间seo网络推广经理
  • 移动医护网站建设利弊长沙seo网站推广
  • 广州招聘网站制作百家号seo怎么做
  • 自个做网站教程自己建网站需要多少钱
  • fullpage网站建网站需要什么
  • 佛山市网站建设分站哪家好单页网站排名优化
  • 电影分享网站源码淘宝权重查询入口
  • 免费建设com网站360网站推广怎么做
  • 苹果14pro max价格常州网站seo
  • 可以免费看日本黄片的app做网站成都移动seo
  • 网站前置审批流程网页搜索引擎
  • 国外对旅游网站建设的现状企业营销案例
  • 对战平台网站怎么建设如何开发网站
  • 邢台网站推广多少钱seo网站推广可以自己搞吗
  • win7做网站怎么把抖音关键词做上去
  • dw网站结构图怎么做白山seo
  • 入驻京东需要自己做网站吗网站优化 seo和sem
  • 电子商务网站建设第二版论文西安百度网站快速排名
  • 网站图片动态换名黄页推广平台有哪些
  • 成都网站建设龙兵网络哈尔滨新闻头条今日新闻
  • 网站资料素材怎么做做推广
  • 创建一家网站如何创职业培训学校
  • 深圳罗湖做网站太原百度快速优化排名