首页 > 其他分享 >设计模式04----原型模式

设计模式04----原型模式

时间:2024-05-13 09:20:30浏览次数:23  
标签:克隆 04 对象 创建 ---- 复制 原型 引用 设计模式

原型模式(Prototype Pattern)是一种创建型设计模式,在软件工程中用来创建对象的副本,从而避免新建对象时的性能开销。此模式利用已存在的对象实例作为原型,通过克隆(Clone)机制来创建新的对象,新对象与原型对象具有相同的属性和状态,但彼此独立,修改一个对象不会影响到另一个。

原理与特点
核心思想:通过复制已经存在的对象来创建新的对象,而不是通过new操作符来创建新对象。这样可以减少对象创建的性能消耗,特别是在创建对象的过程较为复杂或资源消耗较大时。

角色划分:

Prototype(原型):声明一个克隆自身的方法,这是一个接口或抽象类,所有具体原型类都需要实现这个克隆方法。
ConcretePrototype(具体原型):实现Prototype接口,定义克隆自身的具体逻辑,真正完成克隆操作。
适用场景:

需要创建的对象类型繁多,但是创建逻辑相似或部分相同。
创建新对象成本较高,如初始化过程复杂、资源消耗大。
需要避免因使用new操作而产生大量重复代码。
优缺点:

优点:提高对象创建的效率和性能,简化对象的创建过程;易于维护和扩展。
缺点:每个类都需要实现克隆方法,增加了类的复杂度;深拷贝与浅拷贝的问题需要特别注意,以避免共享引用造成意外修改。
实现方式
浅拷贝:创建一个新对象,复制原对象的基本数据类型属性,对于引用类型属性,则复制其引用,因此原对象和克隆对象会共享这些引用类型的值。
深拷贝:除了复制基本数据类型属性外,还会递归地复制引用类型属性,确保原对象和克隆对象之间完全独立,无共享引用。



标签:克隆,04,对象,创建,----,复制,原型,引用,设计模式
From: https://www.cnblogs.com/yaoweijun/p/18188594

相关文章

  • 43.Android 网络编程的简单学习整理
    关于Android网络通信编程Android对HTTP通信提供了支持通过标准的JAVA类HttpURLConnection便可以实现基于URL的请求及响应功能关于URL和URI还分不清吗然后还有就是GET和POST方式提交数据注意使用GET或者POST方式提交参数时为了防止中文乱码要对参数进行编码使用Web......
  • PHP函数date()获取当前时间
    代码:显示的格式:年-月-日小时:分钟:秒相关参数:a:"am"或者"pm"A:"AM"或者"PM"d:几日,二位数字,若不足二位则前面补零,如:"01"至"31"D:星期几,三个英文字母,如:"Fri"F:月份,英文全名,如:"January"h:12小时制的小时,如:"01"至"12&......
  • 传统FTP弊端显现 国产ftp要如何选择?
    FTP(FileTransferProtocol)是一个用于在网络上的计算机之间传输文件的协议。它属于网络协议组的应用层,主要用于文件的上传、下载和文件管理操作,是一种比较通用、操作也比较简单的传输方式。不过随着国产化大浪潮的推进,很多组织机构都需要替换成国产FTP了。使用国产FTP(文件传输协......
  • Mybatis之动态SQL使用讲解
    目录1动态SQL1.1引言1.2数据准备1.3if标签1.3.1在WHERE条件中使用if标签1.3.2在UPDATE更新列中使用if标签1.3.3在INSERT动态插入中使用if标签1.4choose标签1.5trim(set、where)1.5.1where1.5.2set1.5.3trim1.5.3.1trim来表示where1.5.3.2trim来表......
  • MySQL 死锁案例
    记一次MySQL死锁分析处理过程,聊聊我的思路。前车之鉴,后事之师。以一个例子为切入点一、问题背景某业务模块反馈数据库最近出现过几次死锁告警的情况,本文总结了这次死锁排查的全过程,并分析了导致死锁的原因及解决方案。希望给大家提供一个死锁的排查及解决思路。基础环境:......
  • LeetCode 3009. Maximum Number of Intersections on the Chart
    原题链接在这里:https://leetcode.com/problems/maximum-number-of-intersections-on-the-chart/description/题目:Thereisalinechartconsistingof n pointsconnectedbylinesegments.Youaregivena 1-indexed integerarray y.The kth pointhascoordinates......
  • 将任意bmp图片大小重新设置后生成新的bmp图片
    #include<stdio.h>#include<stdlib.h>#include<string.h>#pragmapack(1)/*必须在结构体定义之前使用,这是为了让结构体中各成员按1字节对齐*/typedefstructtagBITMAPFILEHEADER{ unsignedshortbfType; //保存图片类型。'BM' unsignedlongbfSize; //位图......
  • 日常Bug排查-连接突然全部关闭
    日常Bug排查-连接突然全部关闭前言日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。Bug现场最近碰到一个问题,一台机器上的连接数在达到一定连接数(大概4.5W)连接数之后会突然急速下降到几百。在应用上的表现就是大量的连接报......
  • gradle 查看项目版本
    gradle各版本下载地址https://gradle.org/releases/以下是一个简单的例子,展示如何在build.gradle文件中设置项目版本://build.gradle文件中version='1.0-SNAPSHOT'//定义项目版本 如果你的项目使用多模块结构,你可能需要在根build.gradle文件中设置版本,并在每个子......
  • DLP数据防泄密产品选型时 要注意哪些要素?
    DLP(DataLossPrevention,数据丢失防护)产品是一套用于防止敏感数据泄露的技术解决方案。它们通过监控、检测和阻止敏感数据的传输来保护企业的信息资产。所以很多企业会选择DLP数据防泄密产品来保护数据安全。DLP数据防泄密产品的核心功能通常包括:1、数据发现:DLP产品能够在整个......