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

视频网站程序模板缅甸最新消息

视频网站程序模板,缅甸最新消息,丰镇市网站丰镇高铁在哪个位置建设,2018网站的建设与维护前景创建型设计模式主要处理对象的创建机制,试图以适合当前情况的方式创建对象。以下是五种主要的创建型模式及其角色关系图和C实现示例。 1. 单例模式 (Singleton Pattern) 目的:确保一个类只有一个实例,并提供一个全局访问点。 角色关系图 …

创建型设计模式主要处理对象的创建机制,试图以适合当前情况的方式创建对象。以下是五种主要的创建型模式及其角色关系图和C++实现示例。

1. 单例模式 (Singleton Pattern)

目的:确保一个类只有一个实例,并提供一个全局访问点。

角色关系图

[Client] --> [Singleton]||-- getInstance()|-- otherOperation()

C++ 实现

#include <iostream>
#include <mutex>class Singleton {
private:static Singleton* instance;static std::mutex mtx;// 私有构造函数防止外部实例化Singleton() {}public:// 删除拷贝构造函数和赋值操作符Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;static Singleton* getInstance() {std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) {instance = new Singleton();}return instance;}void doSomething() {std::cout << "Doing something..." << std::endl;}
};// 静态成员初始化
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;int main() {Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();std::cout << "s1 address: " << s1 << std::endl;std::cout << "s2 address: " << s2 << std::endl; // 输出相同地址s1->doSomething();return 0;
}

2. 工厂方法模式 (Factory Method Pattern)

目的:定义一个创建对象的接口,但让子类决定实例化哪个类。

角色关系图

[Creator] <|-- [ConcreteCreator]|          ||          |-- factoryMethod()|-- otherOperation()[Product] <|-- [ConcreteProduct]

C++ 实现

#include <iostream>
#include <memory>// 产品接口
class Product {
public:virtual ~Product() {}virtual void operation() = 0;
};// 具体产品A
class ConcreteProductA : public Product {
public:void operation() override {std::cout << "ConcreteProductA operation" << std::endl;}
};// 具体产品B
class ConcreteProductB : public Product {
public:void operation() override {std::cout << "ConcreteProductB operation" << std::endl;}
};// 创建者抽象类
class Creator {
public:virtual ~Creator() {}virtual std::unique_ptr<Product> factoryMethod() = 0;void someOperation() {auto product = factoryMethod();product->operation();}
};// 具体创建者A
class ConcreteCreatorA : public Creator {
public:std::unique_ptr<Product> factoryMethod() override {return std::make_unique<ConcreteProductA>();}
};// 具体创建者B
class ConcreteCreatorB : public Creator {
public:std::unique_ptr<Product> factoryMethod() override {return std::make_unique<ConcreteProductB>();}
};int main() {std::unique_ptr<Creator> creatorA = std::make_unique<ConcreteCreatorA>();creatorA->someOperation();std::unique_ptr<Creator> creatorB = std::make_unique<ConcreteCreatorB>();creatorB->someOperation();return 0;
}

3. 抽象工厂模式 (Abstract Factory Pattern)

目的:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

角色关系图

[AbstractFactory] <|-- [ConcreteFactory1]|                  [ConcreteFactory2]||-- createProductA()|-- createProductB()[AbstractProductA] <|-- [ProductA1]|                  [ProductA2][AbstractProductB] <|-- [ProductB1][ProductB2]

C++ 实现

#include <iostream>
#include <memory>// 抽象产品A
class AbstractProductA {
public:virtual ~AbstractProductA() {}virtual void operationA() = 0;
};// 具体产品A1
class ProductA1 : public AbstractProductA {
public:void operationA() override {std::cout << "ProductA1 operation" << std::endl;}
};// 具体产品A2
class ProductA2 : public AbstractProductA {
public:void operationA() override {std::cout << "ProductA2 operation" << std::endl;}
};// 抽象产品B
class AbstractProductB {
public:virtual ~AbstractProductB() {}virtual void operationB() = 0;
};// 具体产品B1
class ProductB1 : public AbstractProductB {
public:void operationB() override {std::cout << "ProductB1 operation" << std::endl;}
};// 具体产品B2
class ProductB2 : public AbstractProductB {
public:void operationB() override {std::cout << "ProductB2 operation" << std::endl;}
};// 抽象工厂
class AbstractFactory {
public:virtual ~AbstractFactory() {}virtual std::unique_ptr<AbstractProductA> createProductA() = 0;virtual std::unique_ptr<AbstractProductB> createProductB() = 0;
};// 具体工厂1
class ConcreteFactory1 : public AbstractFactory {
public:std::unique_ptr<AbstractProductA> createProductA() override {return std::make_unique<ProductA1>();}std::unique_ptr<AbstractProductB> createProductB() override {return std::make_unique<ProductB1>();}
};// 具体工厂2
class ConcreteFactory2 : public AbstractFactory {
public:std::unique_ptr<AbstractProductA> createProductA() override {return std::make_unique<ProductA2>();}std::unique_ptr<AbstractProductB> createProductB() override {return std::make_unique<ProductB2>();}
};int main() {std::unique_ptr<AbstractFactory> factory1 = std::make_unique<ConcreteFactory1>();auto productA1 = factory1->createProductA();auto productB1 = factory1->createProductB();productA1->operationA();productB1->operationB();std::unique_ptr<AbstractFactory> factory2 = std::make_unique<ConcreteFactory2>();auto productA2 = factory2->createProductA();auto productB2 = factory2->createProductB();productA2->operationA();productB2->operationB();return 0;
}

4. 建造者模式 (Builder Pattern)

目的:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

角色关系图

[Director] --> [Builder]||-- construct()[Builder] <|-- [ConcreteBuilder]|           ||           |-- buildPart()|-- getResult()[Product]

C++ 实现

#include <iostream>
#include <memory>
#include <string>
#include <vector>// 产品类
class Product {
private:std::vector<std::string> parts;public:void addPart(const std::string& part) {parts.push_back(part);}void show() const {std::cout << "Product parts: " << std::endl;for (const auto& part : parts) {std::cout << "- " << part << std::endl;}}
};// 抽象建造者
class Builder {
public:virtual ~Builder() {}virtual void buildPartA() = 0;virtual void buildPartB() = 0;virtual void buildPartC() = 0;virtual std::unique_ptr<Product> getResult() = 0;
};// 具体建造者
class ConcreteBuilder : public Builder {
private:std::unique_ptr<Product> product;public:ConcreteBuilder() : product(std::make_unique<Product>()) {}void buildPartA() override {product->addPart("Part A");}void buildPartB() override {product->addPart("Part B");}void buildPartC() override {product->addPart("Part C");}std::unique_ptr<Product> getResult() override {return std::move(product);}
};// 指挥者
class Director {
public:void construct(Builder& builder) {builder.buildPartA();builder.buildPartB();builder.buildPartC();}
};int main() {ConcreteBuilder builder;Director director;director.construct(builder);auto product = builder.getResult();product->show();return 0;
}

5. 原型模式 (Prototype Pattern)

目的:通过复制现有对象来创建新对象,而不是新建。

角色关系图

[Client] --> [Prototype]||-- clone()[Prototype] <|-- [ConcretePrototype]

C++ 实现

#include <iostream>
#include <memory>
#include <string>// 原型接口
class Prototype {
public:virtual ~Prototype() {}virtual std::unique_ptr<Prototype> clone() const = 0;virtual void printInfo() const = 0;virtual void setValue(int value) = 0;
};// 具体原型
class ConcretePrototype : public Prototype {
private:int value;std::string name;public:ConcretePrototype(int val, const std::string& n) : value(val), name(n) {}std::unique_ptr<Prototype> clone() const override {return std::make_unique<ConcretePrototype>(*this);}void printInfo() const override {std::cout << "ConcretePrototype: " << name << ", value = " << value << std::endl;}void setValue(int val) override {value = val;}
};int main() {std::unique_ptr<Prototype> original = std::make_unique<ConcretePrototype>(10, "Original");std::cout << "Original: ";original->printInfo();// 克隆对象std::unique_ptr<Prototype> clone = original->clone();clone->setValue(20);std::cout << "Clone: ";clone->printInfo();std::cout << "Original after cloning: ";original->printInfo(); // 原始对象不受影响return 0;
}

以上是五种主要的创建型设计模式的C++实现示例。


文章转载自:

http://Z5Hjc796.nzfyx.cn
http://CA3ujGkI.nzfyx.cn
http://72YDQXBw.nzfyx.cn
http://6jxn3hLT.nzfyx.cn
http://p2x5DATp.nzfyx.cn
http://ZEMXHFHZ.nzfyx.cn
http://yJLMCAL6.nzfyx.cn
http://4psjnlkk.nzfyx.cn
http://738Gi09Y.nzfyx.cn
http://9IXALkXM.nzfyx.cn
http://Ijzta8CD.nzfyx.cn
http://l69In92W.nzfyx.cn
http://l201eD1B.nzfyx.cn
http://bCD0NflJ.nzfyx.cn
http://r9umuS5h.nzfyx.cn
http://EkgVSvdG.nzfyx.cn
http://p9K4QEMI.nzfyx.cn
http://9rk0jTC5.nzfyx.cn
http://WCop0jP9.nzfyx.cn
http://LgBInubV.nzfyx.cn
http://x42amzya.nzfyx.cn
http://BV2k1jOl.nzfyx.cn
http://VA9EVNWV.nzfyx.cn
http://SEkXQbWO.nzfyx.cn
http://UO0EP17x.nzfyx.cn
http://B9UGD283.nzfyx.cn
http://V0rCYMca.nzfyx.cn
http://6dSI2Ivc.nzfyx.cn
http://TY5DdR6y.nzfyx.cn
http://a2I5tEmN.nzfyx.cn
http://www.dtcms.com/wzjs/738256.html

相关文章:

  • 做别人一摸一样的网站犯法吗网络营销推广方案pdf
  • 体育西网站开发价格检察院网站建设自查报告
  • 网站建设咨询服务计算机网站开发毕业设计论文开题报告
  • 杭州网站制作机构做网站需要会写代码6
  • 高职专业建设管理网站比较好的网站建设公司电话
  • 福建泉州做淘宝的拿货什么网站网络工程师要考哪些证
  • 厦门住房和城乡建设局网站广告设计哪个网站好
  • 广告传媒公司业务范围东莞网络优化推广
  • 安阳网站优化公司推荐温州哪里有网站优化
  • 吴桥网站图怪兽作图神器下载
  • 古典网站织梦模板郑州百姓网免费征婚
  • 广东网站建设模版自助建站系统介绍
  • 企业网站怎么做省钱建立网站站点的基本过程
  • dede 网站地图 文章wordpress建立公司网站
  • 整站seo技术搜索引擎优化wordpress标签列表内页无效链接
  • 做网站公司长沙哪家好个人网站需要几个备案
  • 江西教育网站建设无忧代理 在线
  • wordpress 国家列表深圳网站制作搜行者seo
  • 百度的网站域名网站管理系统下载
  • soho外贸建站域名续费一般多少一年
  • app网站开发工具下载郑州网页制作设计
  • 手机网站开发专业网站建设怎么放到云空间
  • 做门户网站要多少钱网站切换语言怎么做
  • 石家庄做网站百度推广已备案域名30元
  • 下载网站模板怎么使用教程手机网站开发服务
  • 苏州做网站公司怎么样晋江网站建设价格
  • 泸州市建设规划局网站域名和网站的关系
  • 网站有什么模块金龙网站哪里建设的
  • 上传网站软件动易学校网站模板
  • cpa做电影网站侵权吗网络舆情的应对及处理