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

【常见的设计模式】工厂模式

【设计模式专题之工厂方法模式】2.积木工厂

题目描述
小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。

输入描述
输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示生产的次数。
接下来的 N 行,每行输入一个字符串和一个整数,字符串表示积木的类型。积木类型分为 “Circle” 和 “Square”
两种。整数表示该积木生产的数量

输出描述
对于每个积木,输出一行字符串表示该积木的信息。

输入示例
3
Circle 1
Square 2
Circle 1

输出示例
Circle Block
Square Block
Square Block
Circle Block

提示信息
在示例中,积木工厂生产了4块积木,其中有2块是圆形积木,2块是方形积木。
根据输入的类型,每块积木的信息被输出到控制台。

思路

  1. 先声明接口 Block,不同积木类型,实现该接口
  2. 圆形&方形 积木,实现上述Block接口提供的方法 produce
  3. 实现一个积木生产工厂 BlockFactory,用于生成不同形状的积木对象
  4. main函数中,按要求,批量生产对应积木

注意

  • 字符串常量,统一整理归类放在开头处
  • BlockFactory考虑默认情况 default

Golang版本代码:

package mainimport ("fmt"
)const (StrTypeCircle = "Circle"        // 类型:圆形StrTypeSquare = "Square"        // 类型:方形StrCircleBlock = "Circle Block" // 输出:圆形积木StrSquareBlock = "Square Block" // 输出:方形积木
)// Block 声明接口,不同积木类型,实现该接口
type Block interface {produce() string
}// CircleBlock
type CircleBlock struct {}// produce
func (b CircleBlock) produce() string { // 注意返回stirng类型return StrCircleBlock
}// SquareBlock
type SquareBlock struct{}// produce 实现square接口
func (b SquareBlock) produce() string {return StrSquareBlock
}// BlockFactory 积木生产工厂
func BlockFactory(blockType string) (Block, error) {switch blockType {case StrTypeCircle:return CircleBlock{}, nilcase StrTypeSquare:return SquareBlock{}, nildefault:return nil, fmt.Errorf("input blockType error")}
}func main() {// 输入生产次数n := 0if _, err := fmt.Scanf("%d", &n); err != nil {fmt.Printf("Scanf n: %v, input error\n", n)return}for i := 0; i < n; i++ {// 输入积木类型和数量blockType, quantity := "", 0if _, err := fmt.Scanf("%s %d", &blockType, &quantity); err != nil {fmt.Printf("Scanf blockType: %v, quantity: %v, input error\n", blockType, quantity)return}block, err := BlockFactory(blockType)if err != nil {fmt.Printf("BlockFactory blockType: %v, err: %v\n", blockType, err)return}for j := 0; j < quantity; j++ {fmt.Println(block.produce())}}
}

相关文章:

【常见的设计模式】工厂模式

【设计模式专题之工厂方法模式】2.积木工厂   题目描述 小明家有两个工厂&#xff0c;一个用于生产圆形积木&#xff0c;一个用于生产方形积木&#xff0c;请你帮他设计一个积木工厂系统&#xff0c;记录积木生产的信息。   输入描述 输入的第一行是一个整数 N&#xff08;1 …...

postgres收缩工具两种工具的使用对比

postgres收缩工具安装和使用 第一章 需要使用插件处理膨胀的原因 Postgresql通过数据多版本实现MVCC,现象是删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的OLTP系统,会造成数据膨胀。 PG数据库本身有处理膨胀问题的vacuum工…...

仿真入门——CST软件如何设置分布式计算的共享储存

在 CST Studio Suite 的分布式计算中&#xff0c;常有用户因为某台机器的网络问题丢失某个数据。这里介绍一种方法&#xff0c;可以在使用分布式计算或 MPI 计算时设置共享存储。在这种情况下&#xff0c;不涉及文件传输&#xff0c;所有文件操作都在共享文件的媒介上完成。 数…...

【JVM基础17】——实践-说一下JVM调优工具

目录 1- 引言&#xff1a;2- ⭐核心&#xff1a;2-1 命令工具jpsjstackjmapjstat 2-2 可视化工具jconsoleVisualVM 3- 小结&#xff1a;3-1 说一下 JVM 调优的工具 1- 引言&#xff1a; 命令工具 jps——进程状态信息jstack——查看Java进程内线程的堆栈信息jmap——查看堆转…...

【QT】Qt中Websocket的使用

一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;…...

【vue3】【elementPlus】【国际化】

1.如需从0-1开始&#xff0c;请参考 https://blog.csdn.net/Timeguys/article/details/140995569 2.使用 vue-i18n 模块&#xff1a; npm i vue-i18n3.在 src 目录下创建 locales 目录&#xff0c;里面创建文件&#xff1a;en.js、zh-cn.js、index.js 语言js文件&#xff1a;…...

用python实现求两个整数的最大公约数

def gcd(a, b): """计算最大公约数""" while b: a, b b, a % b return abs(a) 下面是对 gcd 函数的逐行解释&#xff1a; def gcd(a, b):"""计算最大公约数"""定义函数&#xff1a;这里定义了一个名为 gcd…...

Linux 内核源码分析---proc 文件系统

proc文件系统 进程数据文件系统&#xff08;process data filesystem, procfs&#xff09;装载在 /proc&#xff0c;缩写为 procFS。 proc 文件系统是一种虚拟文件系统&#xff0c;其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统&…...

视频号直播回放怎么下载?

一、如果是下载自己直播回放视频&#xff1a; 方法一&#xff1a;视频号助手 打开网址&#xff1a;视频号助手 登陆账号后。下面路径&#xff0c;先点击成回放&#xff0c; 后就可以在下面路径&#xff0c;下载全场回放 但是这种有个缺点&#xff0c;就是不能分段下载。这样…...

【第九节】python中xml解析和json编解码

目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…...

yolo v8部署到云服务器问题记录

环境安装 1、运行项目报错&#xff1a;no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了&#xff0c;安装了GPU版本&#xff0c;需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...

端口被占用,杀死进程的步骤

一、 查看所有进程占用的端口 在开始-运行-cmd,输入&#xff1a;netstat –ano可以查看所有进程 二、查看占用指定端口的程序 查看被那个端口占用&#xff0c;可以用该命令&#xff1a; 三、使用命令杀死进程 杀死进程&#xff0c;使用命令&#xff1a;...

接口入门(企业常见使用,一分钟搞定版)

目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下&#xff1a; 1、接口的定义 定义位置 可以写在类中&#xff0c;但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…...

深入解析:Cookie 与 Session 的区别及应用场景

引言 在Web开发中&#xff0c;Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态&#xff0c;但它们的工作原理和适用场景却有所不同。在本文中&#xff0c;我们将深入探讨 Cookie 和 Session 的区别&#xff0c;并通过…...

LLM金融文本分类文档说明

Python注意事项&#xff1a; 1&#xff0c;创建虚拟环境&#xff1a; conda create --prefixD:\software\Anaconda3\envs\finance_analysis python3.10.4 conda create -p D:/software/anaconda3/envs/finance_analysis python3.10.4 注释&#xff1a; D:\software\anaconda3\e…...

EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?

点击关注&#xff1a;关注GZH【欧亚科睿学术】&#xff0c;GET完整版2023JCR分区列表&#xff01; &#x1f389; &#x1f389; &#x1f389; &#x1f389; 恭喜&#xff01;这本毕业水刊仅2天录用&#xff01;3天见刊&#xff01; 重要时间节点如下 2024-08-03 Sub…...

sql获取过去的小时数

TIMESTAMPDIFF(HOUR, create_time, NOW()) AS pastHours 是一条 SQL 语句的一部分&#xff0c;它使用 TIMESTAMPDIFF 函数来计算两个时间点之间的差异&#xff0c;并将结果标记为 pastHours。 让我们详细解析一下这条语句&#xff1a; TIMESTAMPDIFF 函数: 这个函数用于计算两…...

【Android Studio】彻底卸载

文章目录 卸载程序控制面板卸载安全软件卸载 重启计算机删除文件重启计算机 我们在Android开发时涉及重装时&#xff0c;如果卸载不干净&#xff0c;再次安装是不会正常运行项目的&#xff0c;接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>…...

美术版权可以当做商标使用吗

美术版权与商标的区别及不可混用性分析 在知识产权领域&#xff0c;美术版权和商标权是两个重要的概念&#xff0c;它们各自承载着不同的法律意义和保护范围。 美术版权概述 美术版权&#xff0c;又称著作权&#xff0c;是指著作权人对其创作的美术作品所享有的权利。这些作品…...

控制某些请求不记录日志

说明&#xff1a;由于统一拦截日志请求&#xff0c;导致所有匹配的请求都会打印日志&#xff0c;这里需要控制有些请求执行不打印日志&#xff0c;比如定时每隔几秒执行某些请求。 具体实现如下&#xff1a; 一、自定义注解&#xff0c;如下&#xff1a; /** * Description: …...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...

在Zenodo下载文件 用到googlecolab googledrive

方法&#xff1a;Figshare/Zenodo上的数据/文件下载不下来&#xff1f;尝试利用Google Colab &#xff1a;https://zhuanlan.zhihu.com/p/1898503078782674027 参考&#xff1a; 通过Colab&谷歌云下载Figshare数据&#xff0c;超级实用&#xff01;&#xff01;&#xff0…...