C++设计模式-工厂模式(Factory Method)

目录

C++设计模式-工厂模式(Factory Method)

一、意图

二、适用性

三、结构

四、参与者

五、代码


C++设计模式-工厂模式(Factory Method)

一、意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

二、适用性

  • 当一个类不知道它所必须创建的对象的类的时候。
  • 当一个类希望由它的子类来指定它所创建的对象的时候。
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

三、结构

 

四、参与者

  • Product

        定义工厂方法所创建的对象的接口。

  • ConcreteProduct

        实现Product接口。

  • Creator

        声明工厂发法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。

        可以调用工厂方法以创建一个Product对象。

  • ConcreteCreator

        重定义工厂方法以返回一个ConcreteProduct实例。

五、代码

#include<iostream>
using namespace std;class Product {
public:virtual void ShowInformation() = 0;
};class Product_A : public Product {
public:void ShowInformation() {cout << "Product_A Information" << endl;}
};class Product_B : public Product {
public:void ShowInformation() {cout << "Product_B Information" << endl;}
};class Factory {
public:virtual Product* CreateProduct() = 0;
};class Factory_A : public Factory {
public:Product* CreateProduct() {return new Product_A();}
};class Factory_B : public Factory {
public:Product* CreateProduct() {return new Product_B();}
};int main() {Factory* FactoryA = new Factory_A();Product* ProductA = FactoryA->CreateProduct();ProductA->ShowInformation();Factory* FactoryB = new Factory_B();Product* ProductB = FactoryB->CreateProduct();ProductB->ShowInformation();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125303.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PsychoPy Coder实现心理学小实验

纯python代码实现的&#xff0c;代码并不复杂&#xff0c;主要就是熟悉一个psychopy这个库的函数使用&#xff0c;前面都是psychopy的库函数使用&#xff0c;后面就是将收集到的数据保存为excel表格。 在屏幕中左右各显示一张图像&#xff0c;并显示提示词&#xff1a;要求用户…

OpenHarmony应用开发涉及的主要因素与UX设计规范

一、OpenHarmony应用开发涉及的主要因素 二、OpenHarmony应用开发UX设计规范 UX设计规范的主要内容与部分图标示例 2.OpenHarmony应用设计原则 设计原则&#xff0c;当为多种不同的设备开发应用时&#xff0c;有如下设计原则&#xff1a; 差异性&#xff0c;充分了解所要支…

php单独使用think-rom数据库 | thinkphp手动关闭数据库连接

背景&#xff08;think-orm2.0.61&#xff09; 由于需要长时间运行一个php脚本&#xff0c;而运行过程并不是需要一直与数据库交互&#xff0c;但thinkphp主要是为web站点开发的框架&#xff0c;而站点一般都是数据获取完则进程结束&#xff0c;所以thinkphp没提供手动关闭数据…

TempleteMethod

TempleteMethod 动机 在软件构建过程中&#xff0c;对于某一项任务&#xff0c;它常常有稳定的整体操作结构&#xff0c;但各个子步骤却有很多改变的需求&#xff0c;或者由于固有的原因 &#xff08;比如框架与应用之间的关系&#xff09;而无法和任务的整体结构同时实现。如…

7-2 图着色问题

输入样例&#xff1a; 6 8 3 2 1 1 3 4 6 2 5 2 4 5 4 5 6 3 6 4 1 2 3 3 1 2 4 5 6 6 4 5 1 2 3 4 5 6 2 3 4 2 3 4 输出样例&#xff1a; Yes Yes No No idea 注意合理的方案需满足&#xff1a;用到的颜色数 给定颜色数 solution #include <cstdio> #include &l…

Leetcode 231.2的幂

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

通达信和同花顺能否实现程序化自动交易股票,量化交易如何实现?

以下写给正在寻找自动交易接口的朋友&#xff0c;首先&#xff0c;不是那种设置个简单条件的条件单&#xff0c;或者某些客户端上形同鸡肋的策略交易&#xff0c;那些策略根本称不上策略&#xff0c;还有各种限制&#xff0c;不支持这个不支持那个&#xff0c;可设置的参数也不…

10分钟了解数据架构、数据模型

写在前面&#xff1a;很多小伙伴分不清数据架构与数据模型&#xff0c;同时如何做好数据建模也有一定的疑问 1. 数据架构、数据模型、数据建模区别与联系 企业架构包含业务架构、数据架构、应用架构和技术架构。数据架构的主要目标是有效的管理数据&#xff0c;以及有效地管理…

GPU如何成为AI的加速器

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 本文关键词&#xff1a;GPU、深度学习、GP…

Meilisearch客户端完美改造

关键部分&#xff1a;原来Body部分显示有问题&#xff0c;对\n视而不见。 改造&#xff1a; // Used in Bannertypo15: {tag: span,style: cssfont-size: 15px;font-weight: 300;line-height: 25px;display: inline-block;,},// Used in BodytypoBody: {tag: span,style: cssf…

STM32F4学习笔记读取芯片UID和MAC地址

一、简介 在嵌入式设备开发过程中有时会需要为设备设置唯一的ID用以标识设备唯一&#xff0c;比如要求同一总线上的所有设备ID不能重复&#xff0c;要求设备具体唯一的MAC地址等等。每个STM32微控制器都自带一个96位的唯一ID&#xff0c;这个ID在任何情况下都是唯一且不允许修…

centos7卸载docker

菜鸟教程-常见命令&#xff1a;https://www.runoob.com/docker/docker-command-manual.html 1. 准备工作&#xff1a; 1.1 杀死docker有关的容器&#xff1a; docker kill $(docker ps -a -q)1.2 删除所有docker容器&#xff1a; docker rm $(docker ps -a -q)1.3 删除所有d…