.NET高级面试指南专题十五【 原型模式介绍,Clone要这样去用】

news2024/11/16 15:59:48

在这里插入图片描述

介绍:

原型模式是一种创建型设计模式,其主要目的是通过克隆现有对象来创建新对象,而不是通过实例化新的对象。这种模式在需要创建相似对象时非常有用,尤其是当对象的创建过程比较昂贵或复杂时。

实现原理:

原型模式通过克隆已有的对象来创建新的对象。对象的克隆可以分为浅克隆和深克隆两种方式:

浅克隆: 只复制对象本身,不复制对象内部的引用对象。
深克隆: 除了复制对象本身外,还会递归复制对象内部的引用对象。

思路:

  1. 定义一个抽象原型类或接口,该类或接口声明了一个用于克隆自身的方法。
  2. 具体的原型类实现克隆方法,以实现对象的克隆。
  3. 在需要创建新对象时,通过调用原型对象的克隆方法来创建新对象,而无需直接使用构造函数实例化新对象。

优点:

  1. 提高性能:避免了对象的重复创建和初始化过程,提高了性能。
  2. 简化对象创建过程:通过克隆已有对象来创建新对象,简化了对象的创建过程。
  3. 避免构造函数的调用:直接克隆对象,无需调用构造函数,避免了构造函数的调用过程。

C#代码示例:

using System;

// 抽象原型类
abstract class Prototype
{
    public abstract Prototype Clone();
}

// 具体原型类
class ConcretePrototype : Prototype
{
    private int _data;

    public ConcretePrototype(int data)
    {
        this._data = data;
    }

    // 实现克隆方法
    public override Prototype Clone()
    {
        // 浅克隆
        return (Prototype)this.MemberwiseClone();
        
        // 深克隆
        // return new ConcretePrototype(this._data);
    }

    public void SetData(int data)
    {
        this._data = data;
    }

    public int GetData()
    {
        return this._data;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建原型对象
        ConcretePrototype prototype = new ConcretePrototype(10);

        // 克隆原型对象
        ConcretePrototype clonedPrototype = (ConcretePrototype)prototype.Clone();

        // 修改克隆对象的数据
        clonedPrototype.SetData(20);

        // 打印原型对象和克隆对象的数据
        Console.WriteLine("Prototype Data: " + prototype.GetData()); // 输出 10
        Console.WriteLine("Cloned Prototype Data: " + clonedPrototype.GetData()); // 输出 20
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1502216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索Web中的颜色选择:不同取色方法的实现

在Web开发中,提供用户选择颜色的功能是很常见的需求。无论是为了个性化UI主题,还是为了图像编辑工具,一个直观且易用的取色器都是必不可少的。本文将介绍几种在Web应用中实现取色功能的方法,从简单的HTML输入到利用现代API的高级技…

Kafka MQ 主题和分区

Kafka MQ 主题和分区 Kafka 的消息通过 主题 进行分类。主题就好比数据库的表,或者文件系统里的文件夹。主题可以被分为若干个 分区 ,一个分区就是一个提交日志。消息以追加的方式写入分区,然 后以先入先出的顺序读取。要注意,由…

OPC UA 学习:文件传输

本博文是OPC 10000-20: UA Part 20: File Transfer 的学习笔记。 OPC UA的客户端需要读写服务器端的文件,OPCUA 规范中,是通过文件模型实现的。客户端通过调用文件模型中的方法来处理文件。 在控制系统中,需要下载配置文件,工艺文…

掌握java中继承

目录 1.概念: 2.使用: 3.super关键字 4.子类构造方法 5.super和this关键字 6.初始化时代码块的执行顺序 7.继承的方式 8.final关键字 1.概念: 是面向对象程序设计代码可以重复使用的重要手段,允许程序员在保持原有类特性的…

java注释的详尽解析

一、什么是注解 (1).注解的作用 ①:注解一般用于对程序的说明,就像注释一样,但是区别是注释是给人看的,但是注解是给程序看的。 ②:让编译器进行编译检查的作用,比如下边这个Override注解是重写的意思&am…

漏洞复现-蓝凌LandrayOA系列

蓝凌OA系列 🔪 是否利用过 优先级从高到低 发现日期从近到远 公司团队名_产品名_大版本号_特定小版本号_接口文件名_漏洞类型发现日期.载荷格式LandrayOA_Custom_SSRF_JNDI漏洞 LandrayOA_sysSearchMain_Rce漏洞 LandrayOA_Custom_FileRead漏洞

成功解决TypeError: ‘str‘ object does not support item assignment

成功解决TypeError: ‘str’ object does not support item assignment 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 …

Linux系统安装及简单操作

目录 一、Linux系统安装 二、Linux系统启动 三、Linux系统本地登录 四、Linux系统操作方式 五、Linux的七种运行级别(runlevel) 六、shell 七、命令 一、Linux系统安装 场景1:直接通过光盘安装到硬件上(方法和Windows安装…

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。 追赶 Sora,成为了很多科技公司当下阶段的新目标。研究者们好奇的是:Sora 是如何被 OpenAI 发掘出来的?未来又有哪些演进和应用方向? Sora 的技术报告披露了一些技术细节&…

反编译修改halcondonet.dll的名字

安装ILSpy 打开halcondonet.dll 用VS打开 点击生成Dll会提示很多错误 然后点击错误,所有点一遍,错误基本会自己消失, 还需要把.net改为4.5.2 然后生成成功 把名称改为mysql5dotnet 找到HalconAPI类,将里面的所有字符串“hal…

linux下改变主机名,永久生效的方法

hostnamectl set-hostname test 例子 #支持大写必须就要这样写 hostnamectl set-hostname 名称 --static

LCR 164. 破解闯关密码

解题思路&#xff1a; 贪心 class Solution {public String crackPassword(int[] password) {String[] strs new String[password.length];for(int i 0; i < password.length; i)strs[i] String.valueOf(password[i]);Arrays.sort(strs, (x, y) -> (x y).compareTo(…

全球参考系统(WRS)概述及常用工具汇总

1986年&#xff0c;美国航空航天局&#xff08;NASA&#xff09;定义了一系列数据处理"级别"&#xff0c;用以区分源于其地球观测系统&#xff08;EOS&#xff09;卫星获取的影像生成的标准数据产品。给定任何数据产品&#xff0c;我们可以根据其级别来判断其在生产过…

Docker下Jenkins打包java项目并部署

docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…

Qt初识 - 编辑框 | 按钮 | 命名规范

目录 一、编辑框 (一) Designer中的编辑框 (二) Code中的编辑框 二、按钮 (一) Designer中的按钮 (二) Code中的按钮 三、Qt中的命名规范 一、编辑框 (一) Designer中的编辑框 进入到Designer界面中 找到Input Widgets目录 找到该目录下的 将这个控件拉出去 双击就可…

AntV L7的符号地图

本案例使用L7库和Mapbox GL JS添加符号地图。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 添加符号6. 创建点数据7. 创建点图层8. 演示效果9. 代码实现 1. 引入 CDN 链接 <script src"https://unpkg.com/antv/l7"></script> <scr…

数据中台:数字中国战略关键技术设施

文章目录 每日一句正能量前言为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿&#xff0c;方法论体系更新与时俱进&#xff0c;紧跟时代热点深入6大行业&#xff0c;提炼实践精华大咖推荐&#xff0c;数字化转型必备案头书购买链接赠书活动 每日一句正能量 人生之…

算法学习07:KMP算法

算法学习07&#xff1a;KMP算法 文章目录 算法学习07&#xff1a;KMP算法前言一、KMP算法1.kmp匹配过程&#xff1a;2.求解next数组&#xff08;kmp算法重点&#xff09;3.代码总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff1a; 一、KMP算法 1.kmp匹配过程&…

集合框架(一)List系列集合

特点 有序&#xff0c;可重复&#xff0c;有索引。 LIst集合的特有方法 /** 目标&#xff1a;掌握List系列集合的特点&#xff0c;以及其提供的特有方法* */import java.util.ArrayList; import java.util.List;public class ListTest1 {public static void main(String[] arg…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…