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

C#设计模式之---原型模式

原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。C# 提供了 ICloneable 接口,用 C# 实现原型模式很简单。

(1)使用Object的MemberwiseClone() 方法

using System;
using System.Text;
namespace ConsoleApplication
{public class WebSite{public string Name { get; set; }public string Url { get; set; }static WebSite webSite = new WebSite(){Name = "cjavapy",Url = "https://www.cjavapy.com"};/// /// 原型模式:解决对象重复创建的问题/// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建/// Object有 MemberwiseClone() 方法默认浅克隆/// /// public static WebSite CreateInstancePrototype(){return (WebSite)webSite.MemberwiseClone();}}class Program{static void Main(string[] args){var obj=WebSite.CreateInstancePrototype();Console.WriteLine("Name={0},Url={1}",obj.Name,obj.Url);Console.ReadKey();}}
}

 (2)使用ICloneable接口

using System;
using System.Text;
namespace ConsoleApplication
{public class WebSite : ICloneable{public string Name { get; set; }public string Url { get; set; }static WebSite webSite = new WebSite(){Name = "cjavapy",Url = "https://www.cjavapy.com"};/// /// 原型模式:解决对象重复创建的问题/// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建/// /// public static WebSite CreateInstancePrototype(){return (WebSite)webSite.MemberwiseClone();}public object Clone(){return new WebSite() { Name = this.Name, Url = this.Url };}}class Program{static void Main(string[] args){var obj1 = new WebSite(){Name = "cjavapy",Url = "https://www.cjavapy.com"};var obj2 = (WebSite)obj1.Clone();Console.WriteLine("Name={0},Url={1}", obj2.Name, obj2.Url);Console.ReadKey();}}
}

相关文章:

C#设计模式之---原型模式

原型模式(Prototype Pattern) 原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过…...

STM32入门学习之外部中断

1.STM32的IO口可以作为外部中断输入口。本文通过按键按下作为外部中断的输入,点亮LED灯。在STM32的19个外部中断中,0-15为外部IO口的中断输入口。STM32的引脚分别对应着0-15的外部中断线。比如,外部中断线0对应着GPIOA.0-GPIOG.0,…...

Jenkins 配置maven和jdk

前提:服务器已经安装maven和jdk 一、在Jenkins中添加全局变量 系统管理–>系统配置–>全局属性–>环境变量 添加三个全局变量 JAVA_HOME、MAVEN_HOME、PATH 二、配置maven 系统管理–>全局工具配置–>maven–>新增 新增配置 三、配置JDK 在系统管…...

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号,就可以放到path里。只要右括号数量小于左括号,也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index,并且每次只需要 …...

生命在于折腾——面试问题汇总

这里面的问题都是我参加面试时候遇到的问题,大家就这样看吧。 一、个人情况 1、自我介绍 2、为什么离开上一家公司 3、有没有参加过HVV 4、介绍一下上家公司的项目 5、小程序和公众号渗透测试做过么 6、实习工资多少 7、有挖过漏洞么 二、基础知识 1、信息收集的…...

<Java>Map<String,Object>中解析Object类型数据为数组格式

背景&#xff1a; 前端&#xff1a;入参为字符串和数组类型&#xff1b;通过json字符串传给后台&#xff0c; 后台&#xff1a;后台通过工具解析为Map<String&#xff0c;Object>&#xff0c;然后需要解析出Map里面的数组值做操作&#xff1b; 需求&#xff1a; 入参&…...

别再分库分表了,试试TiDB!

什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…...

Java进阶之Dump文件初体验

视频地址&#xff1a;https://www.bilibili.com/video/BV1Ak4y137oh 学习文章&#xff1a;https://d9bp4nr5ye.feishu.cn/wiki/VQoAwlzrXiLFZekuLIyc1uK5nqc 最近线上频繁的内存告警&#xff0c;同事A通过分析dump文件解决了这个问题&#xff0c;我当然是不会放过这种学习的机…...

基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

曲线拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)

利用PLC进行压力闭环控制的项目背景介绍请查看下面文章链接,这里不再赘述。 信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章,可以查看PID专栏的的系列文章,链接如下:张力控制之速度闭环(速度前馈量计算)_RXXW_Dor的博客-CSD…...

小程序使用echarts

参考文档&#xff1a;echarts官网、echarts-for-weixin 第一步引入组件库&#xff0c;可直接从echarts-for-weixin下载&#xff0c;也可以从echarts官网自定义生成&#xff0c;这里我们就不贴了组件库引入好后&#xff0c;就是页面引用啦&#xff0c;废话不多说&#xff0c;直…...

面向对象——封装

C面向对象的三大特性为&#xff1a;封装、继承、多态 C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; ​ 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重…&#xff0c;行为有走、跑、跳、吃饭、唱歌… ​ 车也可以作为对象&#xf…...

【LeetCode】160.相交链表

题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结…...

【JWT的使用】

文章目录 前言1、用户登录1.1 JWTThreadLocal 2.1 代码实现2.1.1 ThreadLocal工具类2.2.2 定义拦截器2.2.3 注册拦截器 前言 1、用户登录 1.1 JWT JSON Web Token简称JWT&#xff0c;用于对应用程序上用户进行身份验证的标记。使用 JWTS 之后不需要保存用户的 cookie 或其他…...

Python获取音视频时长

Python获取音视频时长 Python获取音视频时长1、安装插件2、获取音视频时长.py3、打包exe4、下载地址 Python获取音视频时长 1、安装插件 pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple2、获取音视频时长.py 上代码&#xff1a;获取音视频时长.py # -*-…...

TCP四次握手为什么客户端等待的时间是2MSL

目录 什么是MSL从第三次握手开始分析总结 什么是MSL MSL是Maximum Segment Lifetime英文的缩写&#xff0c;中文可以译为“报文最大生存时间”&#xff0c;他是任何报文在网络上存在的最长时间&#xff0c;超过这个时间报文将被丢弃。 从第三次握手开始分析 第三次握手服务端…...

Android Studio 启用设备远程调试配置完整步聚

启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…...

玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】

数学公式基础 导言区&#xff08;引包&#xff09; \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版&#xff0c;数学模式用于数学公式排版。 …...

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录&#xff08;非源码安装直接用yum 安装的&#xff09; which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…...

单机部署MinIo并设置开机自启

MinIO 是高性能的对象存储&#xff0c;是为海量数据存储、人工智能、大数据分析而设计的&#xff0c;它完全兼容Amazon S3接口&#xff0c;单个对象最大可达5TB&#xff0c;适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现&#…...

LimboAI:Godot 4原生行为树+黑板+状态机AI框架实战指南

1. 这不是又一个“AI插件”&#xff0c;而是Godot 4里真正能跑通行为树黑板状态机闭环的AI开发框架我第一次在Godot 4.2项目里把LimboAI的BTTaskMoveTo节点拖进行为树编辑器、连上BlackboardKey、再绑定到一个带NavigationAgent3D的NPC身上&#xff0c;按下F5运行——那个角色真…...

CaldroidListener使用教程:轻松实现Android日期点击事件处理

CaldroidListener使用教程&#xff1a;轻松实现Android日期点击事件处理 【免费下载链接】Caldroid A better calendar for Android 项目地址: https://gitcode.com/gh_mirrors/ca/Caldroid Caldroid是一款功能强大的Android日历组件&#xff0c;而CaldroidListener则是…...

2026年数据驱动经济与信息管理国际学术会议(DDEMI 2026)

2026年数据驱动经济与信息管理国际学术会议&#xff08;DDEMI 2026&#xff09;会议时间&#xff1a;2026年8月07日-09日会议地点&#xff1a;江苏-南京截稿日期&#xff1a;2026年7月31日录用结果&#xff1a;投稿后1周内收录检索&#xff1a;EI Compendex, Scopus【大会简介】…...

Unity古代山地环境包:地质逻辑驱动的叙事型地形生成

1. 这不是“贴图堆砌”&#xff0c;而是一套可演化的古代山地世界生成逻辑你有没有试过在Unity里拖进一个“山地环境包”&#xff0c;结果发现——岩石全是平铺的、悬崖边缘像刀切一样整齐、河流只是贴了张带Alpha的平面图、遗迹摆得像博物馆展柜&#xff0c;连风都吹不进这个场…...

从ENVI到MATLAB:高光谱图像处理工作流迁移指南(以真假彩色显示为例)

从ENVI到MATLAB&#xff1a;高光谱图像处理工作流迁移指南&#xff08;以真假彩色显示为例&#xff09; 对于长期使用ENVI进行遥感影像分析的研究者而言&#xff0c;MATLAB的编程环境提供了截然不同的工作流体验。本文将聚焦高光谱图像可视化这一基础但关键的操作&#xff0c;系…...

铜钟音乐:在信息洪流中找回纯粹听歌体验的现代Web应用

铜钟音乐&#xff1a;在信息洪流中找回纯粹听歌体验的现代Web应用 【免费下载链接】tonzhon-music 铜钟 Tonzhon (tonzhon.whamon.com): 干净纯粹的音乐平台 (铜钟已不再使用 tonzhon.com&#xff0c;现在的 tonzhon.com 不是正版的铜钟) 项目地址: https://gitcode.com/GitH…...

Qt5 super module网络编程指南:WebSocket、HTTP、MQTT通信实现

Qt5 super module网络编程指南&#xff1a;WebSocket、HTTP、MQTT通信实现 【免费下载链接】qt5 Qt5 super module 项目地址: https://gitcode.com/gh_mirrors/qt/qt5 Qt5 super module是一个功能强大的跨平台应用程序开发框架&#xff0c;提供了丰富的网络编程功能&…...

Appium Android自动化稳定性实战:从环境踩坑到三层熔断

1. 为什么现在还在手点Android测试&#xff1f;Appium不是“老古董”&#xff0c;而是最稳的工业级选择 很多人一听到Appium&#xff0c;第一反应是“这玩意儿2015年就火了&#xff0c;现在还讲它&#xff1f;”——我去年在给一家做金融类App的客户做质量体系升级时&#xff…...

【IEEE冠名】第七届IEEE人工智能与机电自动化国际学术会议(IEEE-AIEA 2026)

第七届人工智能与机电自动化国际学术会议&#xff08;AIEA 2026&#xff09;致力于将“人工智能”与“机电自动化”领域的专家学者、研发者和技术人员汇集一堂的国际盛会。会议将于2026年6月26-28日在中国深圳举行。会议的主旨是为相关领域的从业者及研究人员提供一个开放、共享…...

好用的长沙装修设计值得选的服务商

在装修设计领域&#xff0c;选择一家靠谱的服务商至关重要。长沙互知空间设计工作室&#xff0c;也就是长沙互知建筑设计有限公司&#xff0c;便是众多客户值得信赖的选择。下面将从几个方面详细分析它的优势&#xff0c;并与其他知名品牌进行对比&#xff0c;为大家提供一些实…...