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

【设计模式专题之原型模式】5. 矩形原型

时间限制:1.000S  空间限制:256MB

题目描述

公司正在开发一个图形设计软件,其中有一个常用的图形元素是矩形。设计师在工作时可能需要频繁地创建相似的矩形,而这些矩形的基本属性(如颜色、宽度、高度)相同,但具体的位置可能不同。

为了提高设计师的工作效率,请你使用原型模式设计一个矩形对象的原型。该原型可以根据用户的需求进行克隆,生成新的矩形对象。

输入描述

第一行输入一个整数 N(1 ≤ N ≤ 100),表示需要创建的矩形数量。 

接下来的 N 行,每行输入一个字符串,表示矩形的属性信息,分别为颜色,长度,宽度,比如 "Red 10 5"。

输出描述

对于每个矩形,输出一行字符串表示矩形的详细信息,如 "Color: Red, Width: 10,Height: 5"。

输入示例
3
Red 10 5
Blue 15 8
Green 12 6
输出示例
Color: Red, Width: 10, Height: 5
Color: Blue, Width: 15, Height: 8
Color: Green, Width: 12, Height: 6
提示信息

使用原型模式中的克隆方法实现矩形对象的创建。

import java.util.Scanner;// 抽象原型类
abstract class Prototype implements Cloneable {public abstract Prototype clone();public abstract String getDetails();// 公共的 clone 方法public Prototype clonePrototype() {try {// 返回克隆类return (Prototype) super.clone();} catch (CloneNotSupportedException e) {// 出现异常打印e.printStackTrace();return null;}}}// 具体矩形原型类
class RectanglePrototype extends Prototype {private String color;private int width;private int height;// 构造方法public RectanglePrototype(String color, int width, int height) {this.color = color;this.width = width;this.height = height;}// 克隆方法@Overridepublic Prototype clone() {return clonePrototype();}// 获取矩形的详细信息@Overridepublic String getDetails() {return "Color: " + color + ", Width: " + width + ", Height: " + height;}
}// 客户端程序
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 读取需要创建的矩形数量int n = sc.nextInt();// 读取每个矩形的属性信息并创建矩形对象for (int i = 0; i < n; i++) {String color = sc.next();int width = sc.nextInt();int height = sc.nextInt();// 创建原型对象Prototype originalRectangle = new RectanglePrototype(color, width, height);// 克隆对象并输出详细信息Prototype clonedRectangle = originalRectangle.clone();//输出该对象的信息System.out.println(clonedRectangle.getDetails());}}
}

相关文章:

  • C#编写函数
  • 深入探索C语言自定义类型:打造你的编程世界
  • Mac上.bashrc转.zshrc时,设置PATH环境变量注意事项
  • 深入浅出FISCO BCOS:区块链底层平台
  • 03_渲染进程调用node
  • 【HomeAssistant新版文件管理器】
  • 第15题. 三数之和
  • windows系统图标变白设置
  • Ubuntu18.04添加内核模块(字符设备)
  • CCF-202012-2:期末预测之最佳阈值
  • Linux chattr命令教程:如何改变文件或目录的属性(附案例详解和注意事项)
  • 2、如何使用ETAS INCA进行发动机标定
  • wsl-oraclelinux 安装 cuda
  • Quartz的分布式功能化设计
  • git 版本回退
  • [译] React v16.8: 含有Hooks的版本
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【Leetcode】104. 二叉树的最大深度
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android Studio:GIT提交项目到远程仓库
  • JavaScript 奇技淫巧
  • java取消线程实例
  • js对象的深浅拷贝
  • MySQL几个简单SQL的优化
  • php的插入排序,通过双层for循环
  • spring boot 整合mybatis 无法输出sql的问题
  • SQL 难点解决:记录的引用
  • Web标准制定过程
  • 读懂package.json -- 依赖管理
  • 关于字符编码你应该知道的事情
  • 利用DataURL技术在网页上显示图片
  • 面试遇到的一些题
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #if和#ifdef区别
  • #stm32整理(一)flash读写
  • $.ajax()
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)STM32单片机上位机
  • (52)只出现一次的数字III
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ./configure,make,make install的作用(转)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)