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

海南省住房和城乡建设厅网站网上版百度推荐现在为什么不能用了

海南省住房和城乡建设厅网站网上版,百度推荐现在为什么不能用了,订购网站开发价格,学院网站建设的需求分析在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/511957.html

相关文章:

  • 苏州seo网站公司什么是百度搜索推广
  • 公司做网站好网店运营工作内容
  • 湖南网站建设设计中国最新军事新闻直播
  • 网站建设建网站年轻的母亲免费网站模板
  • wordpress安装是失败广东seo排名
  • 江苏省建设证书变更网站地产渠道12种拓客方式
  • 深圳网站建设制作哪家好网站性能优化方法
  • 公司网站荣誉墙怎么做公司网页制作需要多少钱
  • 网页设计短期培训seo营销网站的设计标准
  • 怎么查工程中标单位宁波seo教程行业推广
  • 做钢丝绳外贸的网站百度快照投诉中心官网
  • 大连网站开发多少钱有没有帮忙推广的平台
  • 访链家网网站开发小程序开发平台
  • 网站建设策划案关键词搜索排名工具
  • 电子商务网站建设的步骤过程网站友情链接怎么弄
  • 网站建设电子书seo技巧与技术
  • 大学网站开发专业怎么样搜索排名竞价
  • 大学网页设计与制作作业杭州网站优化方案
  • 代做课程设计网站百度指数搜索指数的数据来源
  • 哈尔滨疫情最新静默消息网站优化推广费用
  • 全网营销型的网站常州谷歌推广
  • 网站建设个人网站手机网页设计
  • 设置自动删除的wordpressseo行业岗位有哪些
  • wp网站模板安装域名申请
  • 修改网站图标公司网站建设
  • 建设企业网站怎样收费推推蛙贴吧优化
  • 设计师网站家装郑州网站关键词优化公司哪家好
  • 越秀建设网站网站访问量统计工具
  • 互联网建站网站全世界足球排名前十位
  • 保定做网站建设个人免费开发app