【常见的设计模式】工厂模式
【设计模式专题之工厂方法模式】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块是方形积木。
根据输入的类型,每块积木的信息被输出到控制台。
思路
- 先声明接口
Block,不同积木类型,实现该接口 - 圆形&方形 积木,实现上述Block接口提供的方法
produce - 实现一个积木生产工厂
BlockFactory,用于生成不同形状的积木对象 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.积木工厂 题目描述 小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。 输入描述 输入的第一行是一个整数 N(1 …...
postgres收缩工具两种工具的使用对比
postgres收缩工具安装和使用 第一章 需要使用插件处理膨胀的原因 Postgresql通过数据多版本实现MVCC,现象是删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的OLTP系统,会造成数据膨胀。 PG数据库本身有处理膨胀问题的vacuum工…...
仿真入门——CST软件如何设置分布式计算的共享储存
在 CST Studio Suite 的分布式计算中,常有用户因为某台机器的网络问题丢失某个数据。这里介绍一种方法,可以在使用分布式计算或 MPI 计算时设置共享存储。在这种情况下,不涉及文件传输,所有文件操作都在共享文件的媒介上完成。 数…...
【JVM基础17】——实践-说一下JVM调优工具
目录 1- 引言:2- ⭐核心:2-1 命令工具jpsjstackjmapjstat 2-2 可视化工具jconsoleVisualVM 3- 小结:3-1 说一下 JVM 调优的工具 1- 引言: 命令工具 jps——进程状态信息jstack——查看Java进程内线程的堆栈信息jmap——查看堆转…...
【QT】Qt中Websocket的使用
一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,…...
【vue3】【elementPlus】【国际化】
1.如需从0-1开始,请参考 https://blog.csdn.net/Timeguys/article/details/140995569 2.使用 vue-i18n 模块: npm i vue-i18n3.在 src 目录下创建 locales 目录,里面创建文件:en.js、zh-cn.js、index.js 语言js文件:…...
用python实现求两个整数的最大公约数
def gcd(a, b): """计算最大公约数""" while b: a, b b, a % b return abs(a) 下面是对 gcd 函数的逐行解释: def gcd(a, b):"""计算最大公约数"""定义函数:这里定义了一个名为 gcd…...
Linux 内核源码分析---proc 文件系统
proc文件系统 进程数据文件系统(process data filesystem, procfs)装载在 /proc,缩写为 procFS。 proc 文件系统是一种虚拟文件系统,其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统&…...
视频号直播回放怎么下载?
一、如果是下载自己直播回放视频: 方法一:视频号助手 打开网址:视频号助手 登陆账号后。下面路径,先点击成回放, 后就可以在下面路径,下载全场回放 但是这种有个缺点,就是不能分段下载。这样…...
【第九节】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、运行项目报错:no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了,安装了GPU版本,需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...
端口被占用,杀死进程的步骤
一、 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano可以查看所有进程 二、查看占用指定端口的程序 查看被那个端口占用,可以用该命令: 三、使用命令杀死进程 杀死进程,使用命令:...
接口入门(企业常见使用,一分钟搞定版)
目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下: 1、接口的定义 定义位置 可以写在类中,但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…...
深入解析:Cookie 与 Session 的区别及应用场景
引言 在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过…...
LLM金融文本分类文档说明
Python注意事项: 1,创建虚拟环境: conda create --prefixD:\software\Anaconda3\envs\finance_analysis python3.10.4 conda create -p D:/software/anaconda3/envs/finance_analysis python3.10.4 注释: D:\software\anaconda3\e…...
EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?
点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…...
sql获取过去的小时数
TIMESTAMPDIFF(HOUR, create_time, NOW()) AS pastHours 是一条 SQL 语句的一部分,它使用 TIMESTAMPDIFF 函数来计算两个时间点之间的差异,并将结果标记为 pastHours。 让我们详细解析一下这条语句: TIMESTAMPDIFF 函数: 这个函数用于计算两…...
【Android Studio】彻底卸载
文章目录 卸载程序控制面板卸载安全软件卸载 重启计算机删除文件重启计算机 我们在Android开发时涉及重装时,如果卸载不干净,再次安装是不会正常运行项目的,接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>…...
美术版权可以当做商标使用吗
美术版权与商标的区别及不可混用性分析 在知识产权领域,美术版权和商标权是两个重要的概念,它们各自承载着不同的法律意义和保护范围。 美术版权概述 美术版权,又称著作权,是指著作权人对其创作的美术作品所享有的权利。这些作品…...
控制某些请求不记录日志
说明:由于统一拦截日志请求,导致所有匹配的请求都会打印日志,这里需要控制有些请求执行不打印日志,比如定时每隔几秒执行某些请求。 具体实现如下: 一、自定义注解,如下: /** * Description: …...
如何永久保存番茄小说?3个强力方案告别网络依赖
如何永久保存番茄小说?3个强力方案告别网络依赖 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾在深夜追更时突然断网?是否担心喜欢的小说某天会从平台消失…...
为什么你的Spring Boot 4.0 Agent始终“不就绪”?7步诊断清单+ClassLoader隔离冲突终极解法
第一章:Spring Boot 4.0 Agent-Ready 架构演进与核心挑战Spring Boot 4.0 将 JVM Agent 集成能力提升为核心架构特性,标志着从“可监控”迈向“原生可观测”的范式跃迁。该版本深度重构了启动生命周期、类加载器隔离机制与 Bean 注册流程,使字…...
如何快速掌握OpenEMS:开源能源管理系统的完整指南
如何快速掌握OpenEMS:开源能源管理系统的完整指南 【免费下载链接】openems OpenEMS - Open Source Energy Management System 项目地址: https://gitcode.com/gh_mirrors/op/openems 想要打造智能能源管理系统却不知从何入手?OpenEMS开源能源管理…...
别再只ping了!用Kali的arpspoof工具,5分钟让你看懂局域网ARP攻击到底怎么断网的
从ARP协议到断网攻击:用Kali的arpspoof工具揭示局域网安全漏洞 你是否遇到过这样的情况——明明Wi-Fi信号满格,却突然无法上网?或者发现网络时断时续,怀疑有人在"搞鬼"?这很可能就是遭遇了ARP欺骗攻击。今天…...
JPEXS Free Flash Decompiler:终极SWF反编译与资源提取工具完全指南
JPEXS Free Flash Decompiler:终极SWF反编译与资源提取工具完全指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler 是一款功能强大的开源Flas…...
STM32F103C8T6实战:I2C驱动STP23L测距传感器与OLED显示优化
1. 项目背景与硬件选型 第一次接触STM32F103C8T6驱动STP23L测距传感器时,我完全没料到这个蓝色小模块会成为后续多个项目的核心组件。STP23L是一款基于TOF(飞行时间)原理的激光测距传感器,测量范围0.1-3米,精度可达1m…...
WePush邮件推送完全手册:从基础配置到批量发送的完整流程
WePush邮件推送完全手册:从基础配置到批量发送的完整流程 【免费下载链接】WePush 专注批量推送的小而美的工具,目前支持:模板消息-公众号、模板消息-小程序、微信客服消息、微信企业号/企业微信消息、阿里云短信、阿里大于模板短信 、腾讯云…...
JSP 入门实战项目
一、JSP 基础实战项目,包含:1. login.jsp — 用户登录页面页面功能:用户名、密码输入表单提交到 userinfo.jsp 进行验证提供 “注册” 链接跳转2. userinfo.jsp — 登录信息校验页面核心逻辑:获取用户名、密码参数判断账号密码是否…...
Trae 国际版下载地址
Trae 国际版官方网站下载页:https://www.trae.ai/download...
毕设-情绪雷达
情绪雷达 注: 项目基于芋道的 mini 版,进行二次开发,部署文档就不过多赘述了,可以看人家的官方文档。 概述: 情绪雷达,项目的核心开发路线是:针对用户发来的聊天界面截图,利用 a…...
