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

设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景

文章目录

  • 一、什么是原型模式
  • 二、使用场景
  • 三、代码示例


一、什么是原型模式

原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新的对象,而无需通过调用构造函数来创建。原型模式通过克隆操作来创建对象,提供了一种更加灵活和高效的对象创建方式。

在现实生活中,原型模式的例子可以是制作玩具的模具。模具(原型对象)定义了玩具的形状和细节,而根据模具可以快速复制出多个相同的玩具(克隆对象)。

二、使用场景

  1. 当创建新对象的成本较高时,可以使用原型模式来复制一个现有对象来创建新对象,避免了重复的初始化操作。
  2. 当需要创建的对象是动态的,并且无法提前确定其具体类型时,可以使用原型模式。通过克隆操作,可以将复制对象的具体类型由运行时动态决定。

三、代码示例

下面是一个通俗易懂的原型模式示例代码,以动物克隆为场景:

// 抽象原型:动物
abstract class Animal implements Cloneable {private String name;public Animal(String name) {this.name = name;}public String getName() {return name;}public abstract Animal clone();
}// 具体原型:猫
class Cat extends Animal {public Cat(String name) {super(name);}@Overridepublic Animal clone() {return new Cat(getName());}
}// 具体原型:狗
class Dog extends Animal {public Dog(String name) {super(name);}@Overridepublic Animal clone() {return new Dog(getName());}
}// 客户端代码
public class Main {public static void main(String[] args) {Animal cat = new Cat("Tom");Animal clonedCat = cat.clone();System.out.println("Original Cat: " + cat.getName());System.out.println("Cloned Cat: " + clonedCat.getName());Animal dog = new Dog("Max");Animal clonedDog = dog.clone();System.out.println("Original Dog: " + dog.getName());System.out.println("Cloned Dog: " + clonedDog.getName());}
}

在上面的示例中,Animal是抽象原型类,定义了动物的名称和克隆方法clone。Cat和Dog是具体原型类,分别实现了抽象原型类的克隆方法,并在构造函数中设置动物的名称。

在客户端代码中,首先创建了一个原始的猫对象cat,然后通过调用clone方法克隆出一个新的猫对象clonedCat。同样地,创建了一个原始的狗对象dog,并克隆出一个新的狗对象clonedDog。最后,打印出原始动物和克隆动物的名称。

通过使用原型模式,可以在不通过构造函数创建对象的情况下,复制现有对象来创建新对象。这种方式可以避免重复的初始化操作,提高对象的创建效率。同时,原型模式也提供了一种动态创建对象的方式,允许根据运行时决定复制对象的具体类型。

相关文章:

设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景

文章目录 一、什么是原型模式二、使用场景三、代码示例 一、什么是原型模式 原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新的对象,而无需通过调用构造函数来创建。原型模式通过克隆操作来创建对象,提供了一种更加灵活和高效…...

数据结构之进阶二叉树(二叉搜索树和AVL树、红黑树的实现)超详细解析,附实操图和搜索二叉树的实现过程图

绪论​ “生命有如铁砧,愈被敲打,愈能发出火花。——伽利略”;本章主要是数据结构 二叉树的进阶知识,若之前没学过二叉树建议看看这篇文章一篇掌握二叉树,本章的知识从浅到深的对搜索二叉树的使用进行了介绍和对其底层…...

SpringIOC之LocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…...

前端案例—antdDesign的Select多选框组件加上全选功能

前端案例—antdDesign的Select多选框组件加上全选功能。 实现效果如下: Select 组件里有这个属性,可以利用这个对下拉菜单进行自定义。 const handleChange (e, value) > {setSelectState(e.target.checked)let arr productOptions?productOption…...

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘,具有超过 100 种服务和多语言翻译的集成。 快速:网站在构建时以静态方式生成,加载时间飞快。安全:所有对后…...

HBase基础知识(二):HBase集群部署、HBaseShell操作

1. HBase安装部署 1.1 Zookeeper正常部署 首先保证Zookeeper集群的正常部署,并启动之: 创建集群启动脚本: #!/bin/bash case $1 in "start"){ for i in hadoop100 hadoop101 hadoop102 do echo----------zookeeper $i 启动----…...

C 标准库 - <time.h>

简介 time.h 头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数。 库变量 下面是头文件 time.h 中定义的变量类型: 序号变量 & 描述1size_t是无符号整数类型,它是 sizeof 关键字的结果。2clock_t这是一个适合存储处理器时间的类型。3…...

养老院自助饮水机(字符设备驱动)

目录 1、项目背景 2、驱动程序 2.1 三层架构 2.2 驱动三要素 2.3 字符设备驱动 2.3.1 驱动模块 2.3.2 应用层 3、设计实现 3.1 项目设计 3.2 项目实现 3.2.1 驱动模块代码 3.2.2 用户层代码 4、功能特性 5、技术分析 6. 总结与未来展望 1、项目背景 养老院的老人…...

Jenkins 构建触发器指南

目录 触发远程构建 (例如,使用脚本) 描述 配置步骤 安全令牌 在其他项目构建完成后触发构建 描述 配置步骤 定时触发构建 描述 配置步骤 GitHub钩子触发GITScm轮询 描述 配置步骤 Poll SCM - 轮询版本控制系统 描述 触发远程构建 (例如,使…...

通用的java中部分方式实现List<自定义对象>转为List<Map>

自定义类 /*** date 2023/12/19 11:20*/ public class Person {private String name;private String sex;public Person() {}public Person(String name, String sex) {this.name name;this.sex sex;}public String getName() {return name;}public String getSex() {return…...

Python---静态Web服务器-返回固定页面数据

1. 开发自己的静态Web服务器 实现步骤: 编写一个TCP服务端程序获取浏览器发送的http请求报文数据读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。 2. 静态Web服务器-返回固…...

react v-18父组件调用子组件的方法和数据

版本 "react": "^18.1.0", "react-dom": "^18.1.0", 父组件 import React, { useState, useRef, memo, useEffect } from "react"; import { useTranslation } from "react-i18next"; import { Card } from &q…...

Linux——缓冲区

我在上篇博客留下了一个问题,那个问题就是关于缓冲区的问题,我们发现 文件有缓冲区,语言有用户级缓冲区,那么缓冲区到底是什么?,或者该怎 么认识缓冲区?这篇文章或许会让你有所认识,…...

Mac 生成Android签名证书 .keystore文件

工具下载地址 https://www.oracle.com/java/technologies/downloads/#jdk21-mac1. 找到安装jdk的路径,并进入bin目录下 1.1 查找JDK命令 /usr/libexec/java_home -v结果为: java_home: option requires an argument -- v /Library/Java/JavaVirtualMachines/jdk…...

电商数仓项目----笔记六(数仓ODS层)

ODS层的设计要点如下: (1)ODS层的表结构设计依托于从业务系统同步过来的数据结构。 (2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比较高的,此处选择gzip。 (3)…...

rtsp视频在使用unity三维融合播放后的修正

1 rtsp 接入 我们使用unity UE 等三维渲染引擎中使用c编写插件来接入rtsp 视频。同时做融合的时候,和背景的三维颜色要一致,这就要使用视频融合修正技术。包括亮度,对比度,饱和度的修正。在单纯颜色上的修正可以简单使用rgb->…...

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候,有投递简历功能,有投递就会有随之而来的查看简历对吧,我投递过的简历,另存为一个文件夹,就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹,用于存放PDF&#x…...

运维笔记之centos部署Go-FastDfs

安装Go-FastDfs 当前最新版本为1.4.5,但发布的最新版本为1.4.4 # 下载文件 wget --no-check-certificate https://github.com/sjqzhang/go-fastdfs/releases/download/v1.4.4/fileserver -O fileserver # 赋权限 chmod x fileserver # 运行 ./fileserver server服…...

C#基础——线程(线程池、线程锁、线程抢占、多线程)

线程 进程(Process)是由操作系统分配资源并执行的一个独立的程序实,属于Windows的概念,进程结束就表示程序关闭了。 线程(Thread)是程序中执行的最小单位。一个线程代表了一个独立的执行流,可…...

C# WPF上位机开发(QT vs WPF)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 最近经常收到朋友们的私信,他们对C# WPF开发很感兴趣,但是呢,正当准备学习的时候,又有人告诉他们应…...

2-高可用-负载均衡、反向代理

负载均衡、反向代理 upstream server即上游服务器,指Nginx负载均衡到的处理业务的服务器,也可以称之为real server,即真实处理业务的服务器。 对于负载均衡我们要关心的几个方面如下: 上游服务器配置:使用upstream server配置上…...

STM32 使用ARM仿真器设置

STM32单片机程序下载到单片机芯片中有两种方式,①编译生成HEX,使用程序烧录软件刷到单片机芯片里。②使用ARM仿真器下载程序。使用ARM仿真器的优势是,在工程编译没问题直接在Keil软件里就可以将程序下载到单片机里,并且程序可以在…...

【Java】spring

一、spring spring是一个很大的生态圈,里面有很多技术。 其中最基础的是spring framework,主要的技术 是springboot以及springcloud。 1、spring framework spring framework是spring生态圈中最基础的项目,是其他项目的基础。 1.1、核心…...

C语言中关于操作符的理解

本篇文章只会列出大家在生活中经常使用的操作符 算术操作符 在算数操作符中常用的有&#xff0c;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;% &#xff0c;我们重点讲一讲 / (除) 和 % (模) " / "运算 #include <stdio.h>int main() {int a5/2;fl…...

Flutter本地化(国际化)之App名称

文章目录 Android国际化IOS国际化 Flutter开发的App&#xff0c;如果名称想要跟随着系统的语言自动改变&#xff0c;则必须同时配置Android和IOS原生。 Android国际化 打开android\app\src\main\res\values 创建strings.xml 在values上右键&#xff0c;选择New>Values Res…...

Redis哨兵源码分析

在Redis server启动过程中&#xff0c;实现了实例化和初始化 1、哨兵实例化过程&#xff0c;采用redis sentinel指令实例化还是redis server下的参数实例化--sentinel。 // 检查服务器是否以 Sentinel 模式启动 server.sentinel_mode checkForSentinelMode(argc,argv);/* Re…...

安装Neo4j

jdk1.8对应的neo4j的版本是3.5 自行下载3.5版本的zip文件 地址 解压添加环境变量 变量名&#xff1a;NEO4J_HOME 变量值&#xff1a;D:\neo4j-community-3.5.0 &#xff08;你自己的地址&#xff09; PATH添加&#xff1a; %NEO4J_HOME%\bin (如果是挨着的注意前后英…...

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起&#xff0c;越来越多的人开始关注鸿蒙开发&#xff0c;并希望成为鸿蒙开发者。然而&#xff0c;鸿蒙开发并不适合所有人&#xff0c;那么哪些人最适合学习鸿蒙开发呢&#xff1f;本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…...

深信服技术认证“SCSA-S”划重点:命令执行漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…...

Flink系列之:Savepoints

Flink系列之&#xff1a;Savepoints 一、Savepoints二、分配算子ID三、Savepoint 状态四、算子五、触发Savepoint六、Savepoint 格式七、触发 Savepoint八、使用 YARN 触发 Savepoint九、使用 Savepoint 停止作业十、从 Savepoint 恢复十一、跳过无法映射的状态恢复十二、Resto…...

容桂网站制作信息/北京做的好的seo公司

1、多长时间将业务上线当使用独立服务器时&#xff0c;要将业务部署上线所需的时间最低在1-3天左右。因为涉及服务器硬件配置、上架通电、环境设置、调试等&#xff0c;这系列工作完成后才能交付予您正常使用。但通过2、CPU、内存或磁盘升级云服务器和独立服务器都允许硬件升级…...

html5写的网站有什么好处/小程序开发公司前十名

在一个表格中&#xff0c;假设有一栏数据非常多&#xff0c;如果在页面中完全显示该数据&#xff0c;则会导致表格非常难看&#xff0c;宽窄高低不一。 效果如下图&#xff1a; 很明显这是不美观的&#xff0c;非常影响用户体验。为了达到更好的效果&#xff0c;我们需要下面的…...

城乡建设部网官方网站/市场推广方案ppt

我的环境 f.lux 我的使用感受是让屏幕看起来舒服一些&#xff0c;因为我有近视&#xff0c;所以需要保护眼睛。 f.lux官网&#xff1a;https://justgetflux.com/ f.lux v4.47 windows 10 x64 显示器&#xff1a;戴尔(DELL) P2414H 我最常用的色温值&#xff1a;5200 f.lux zipc…...

网站的访问量统计怎么做/seo搜狗

Entity Framework支持3种不同的开发方法 1.Code First 2.Model First 3.Database First Code First 使用Code First开发模式&#xff0c;你完全避免与EDMX间的开发工作。你首先写好POCO&#xff0c;然后从这些POCO类中创建数据库 喜欢使用DDD&#xff08;Domain-Driven Desing&…...

专门做澳大利亚项目的网站/上海百度seo网站优化

通过Java API来访问HDFS 1.Windows上配置环境变量 解压Hadoop&#xff0c;然后把Hadoop的根目录配置到HADOOP_HOME环境变量里面 然后把HADOOP_HOME/lib和HADOOP_HOME/bin配置到path里面 2.替换bin目录 将官网下载的Hadoop目录下面的bin目录替换成Windows下编译的Hadoop的bin目录…...

网站制作设计/google下载

RabbitMQ&#xff1a; 优点&#xff1a;轻量&#xff0c;迅捷&#xff0c;容易部署和使用&#xff0c;拥有灵活的路由配置 缺点&#xff1a;性能和吞吐量较差&#xff0c;不易进行二次开发 RocketMQ&#xff1a; 优点&#xff1a;性能好&#xff0c;稳定可靠&#xff0c;有活…...