首页 > 其他分享 >毅四捕Go设计模式笔记——原型模式

毅四捕Go设计模式笔记——原型模式

时间:2024-04-05 18:29:22浏览次数:19  
标签:Prototype 对象 毅四捕 public property 原型 Go 设计模式 clone

为了解决什么问题?

原型模式主要用来解决对象的创建问题,特别是当直接创建对象的成本比较高时(例如,需要复杂的初始化过程,或是创建一个和已存在对象一样的实例)。

它允许通过复制一个已存在的实例来返回完全一样的副本,而不需要知道对象的具体类型,并可以在此基础上进行更改。

怎么用代码实现?

Java代码示例:

public class Prototype implements Cloneable {
	private String property;

	public Prototype(String property) {
		this.property = property;
	}

	/**
	 * 使用克隆方法创建对象副本
 	 */
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone();
	}

	public String getProperty() {
		return property;
	}
}

public class Client {
    public static void main(String[] args) {
        try {
            Prototype prototype = new Prototype("Original");
            Prototype clone = (Prototype) prototype.clone();
            System.out.println(clone.getProperty()); // 输出 "Original"
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

为什么可以解决这个问题?

原型模式通过复制一个已经存在的对象,避免了新对象创建的开销,尤其是当创建的过程复杂或者成本较高时。

原型模式同时也提供了一种简便的方式,允许动态添加或删除产品至系统中,因为克隆操作本身不依赖于具体的类。

原型模式适用于哪些场景?

原型模式适用于以下几种场景:

复杂对象创建:当对象的创建包括多个步骤,每一步骤都可能很复杂。

性能和安全要求:需要优化性能并减少系统对创建新对象的开销,或是在安全环境中不便于类初始化等。

动态访问:在运行时动态地向对象池添加和删除对象。

原型模式比较经典,下面是一些经典的应用案例:

java.lang.Object#clone():在Java中任何继承自Object类的对象都已经实现了clone()方法,可以用来作为对象副本的创建手段。

Apache Commons Lang:其中的SerializationUtils.clone() 方法,该方法通过对象的序列化和反序列化来实现深层次克隆。

原型模式在那些需要大量相似对象初始化的场景下尤为有用,能够大大减轻创建对象的负担,并且提高了代码运行效率。

然而,使用原型模式需小心处理克隆对象与原对象之间的关系,特别是对复杂对象或包含其他对象引用时的深浅拷贝问题。

———————————这是分割线———————————

欢迎添加博主vx深入交流:
博主微信

标签:Prototype,对象,毅四捕,public,property,原型,Go,设计模式,clone
From: https://blog.csdn.net/yes8go/article/details/137207249

相关文章

  • 我为什么会选择Vim来开发Go项目及Vim IDE安装配置和操作
    你好,我是孔令飞,字节跳动云原生资深研发、前腾讯云原生技术专家。《企业级Go项目开发实战》、《从零开发企业级Go应用》作者,欢迎加入孔令飞的云原生实战营,助你进阶Go+云原生高级开发工程师。作为一名Golang开发,你需要一个编辑器来完成你日常的代码编写。在编写代码过程......
  • 【系统深入学习GO】Go 的并发机制-原理探究 线程实现模型
    在操作系统提供的内核线程之上,Go搭建了一个特有的两级线程模型。*两级线程模型:两级线程模型也称为多对多(M:N)的线程实现。与其他模型相比,两级线程模型提供了更求的灵活性。在此模型下,一个进程可以与多个KSE相关联,这与内核级线程模型相似。但与内核级线程模型不同的是,进程......
  • 设计模式-工厂模式
    作用:提供一个接口,返回子对象将bean注入工厂方式:1.@Component+构造器:AbstractLogicChain实现ILogicChain接口@Component("rule_blacklist")publicclassBlackListLogicChainextendsAbstractLogicChain@Component("default")publicclassDefaultLogicChainex......
  • 设计模式总结-简单工厂模式
    简单工厂模式创建型模式创建型模式概述创建型模式种类简单工厂模式模式定义模式动机模式结构模式分析模式实例与解析实例一:简单电视机工厂实例二:权限管理模式优缺点简单工厂模式的优点简单工厂模式的缺点模式适用环境模式扩展小结创建型模式创建型模式概述创建......
  • 【python毕业设计】社区居民健康档案管理系统8cgo7
    典型的应用系统中还需要系统维护这一功能,其主要包括:(1)可以完成社区居民家庭和个人基本信息的维护和查询功能。(2)可以完成社区居民健康档案管理系统用户的添加、删除、修改等功能。(3)可以完成用户组的维护和用户组的查询功能。(4)可以完成数据备份和恢复的功能。(5)可以完成......
  • Tomcat使用的设计模式
    目录门面模式(FacadePattern):观察者模式(ObserverPattern):工厂模式(FactoryPattern):策略模式(StrategyPattern):Tomcat中使用了多种设计模式,以下是主要设计模式:门面模式(FacadePattern):门面模式用于封装子系统的具体实现,为外部系统提供统一的外观类。在Tomcat中,门面模式的应......
  • goDbClient开源代码--通用查询
    开源地址: https://gitee.com/ichub/godbclient.git通用查询funcTest0010_SelectDptSub(t*testing.T){vardbRequest=NewPageDbRequest(2)dbRequest.TableName="department"dbRequest.Eq("id",1)dbRequest.NewSubTable()dbR......
  • SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环
    SCI一区|Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测目录SCI一区|Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介......
  • 基于 Docker 的 go grpc quickstart
    工作之后一直使用的RPC框架是Apache的thrift,现在发现grpc更流行,所以也要学习一下,先来简单的跑一下demo。在本地安装运行也很方便,不过因为有了docker,所以在docker里面安装运行隔离性更好,顺便也提升docker命令行的熟练度。1.编写Dockerfile文件FROMgolang:1......
  • 0x01 - 新建go项目 & go项目的模块处理
    0x00-目标-一个计算器项目,可以计算加法和开根号首先要有一个根目录的概念。我们给这个项目起一个名字,叫做first_go.看一下我们要有的目录结构长这样:(base)vth@vthdeMacBook-Prolearn_go%tree.└──first_go├──bin│└──calc├──pkg......