4 原始模型(Prototype)模式

1. 含义

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象.

 

2.类图

简单形式


登记形式


3.类代码

    简单形式

/**
 * 抽象原型角色
 *
 */
public interface Prototype extends Cloneable {
	Object clone();
}


/**
 * 具体原型角色
 */
public class ConcretePrototype implements Prototype{
	public Object clone() {
		try{
			return (Prototype)super.clone();
		}catch(CloneNotSupportedException e){
			return null;
			
		}
	}
}


/**
 * 客户角色
 */
public class Client {
	private Prototype prototype;

	public void operation(Prototype example) {
		prototype = (Prototype) example.clone();
		S.s(example);
		S.s(prototype);
	}

	public static void main(String[] a) {
		Client c = new Client();
		c.operation(new ConcretePrototype());

	}
}

  登记形式

/**
 * 抽象原型角色
 *
 */
public interface Prototype extends Cloneable {
	Object clone();
}


/**
 * 具体原型角色
 */
public class ConcretePrototype implements Prototype {
	@SuppressWarnings("finally")
	public synchronized Object clone() {
		Prototype temp = null;

		try {
			temp = (Prototype) super.clone();
			return temp;
		} catch (CloneNotSupportedException e) {
			S.s("Clone failed.");

		} finally {
			return temp;
		}
	}
}


/**
 * 原型管理器角色
 */

public class PrototypeManager {
	private Vector objects = new Vector();

	public void add(Prototype p) {
		objects.add(p);
	}

	public Prototype get(int i) {
		return (Prototype) objects.get(i);
	}

	public int getSize() {
		return objects.size();
	}
}


/**
 * 客户角色
 */
public class Client {
	public PrototypeManager pm = new PrototypeManager();
	private Prototype prototype;

	public void registerPrototype() {
		prototype = new ConcretePrototype();
		Prototype copytype = (Prototype) prototype.clone();
		pm.add(copytype);
	}

	public static void main(String[] a) {
		Client c = new Client();
		c.registerPrototype();
		c.registerPrototype();
		S.s(c.pm.getSize());
	}
}
 

4. 深复制

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * 具体原型角色
 */
public class ConcretePrototype implements Prototype, Serializable {
	public Object clone() {
		Prototype concretePrototype = null;
		try {
			concretePrototype = (Prototype)deepClone();
			return concretePrototype;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			return concretePrototype;
		}
	}

	/**
	 * 通过在流里读来读去的方式来实现深复制
	 * 
	 * @return
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public Object deepClone() throws IOException, ClassNotFoundException {
		// 将对象写到流里
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		ObjectOutputStream oo = new ObjectOutputStream(bo);
		oo.writeObject(this);
		// 从流里读回来
		ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
		ObjectInputStream oi = new ObjectInputStream(bi);
		return oi.readObject();
	}
}
 

z

Mumax3高效模拟技巧:如何利用代码模板快速完成磁性材料特性分析 本文介绍了利用Mumax3代码模板库提升磁性材料微磁学模拟效率的核心方法。通过构建模块化的环境配置、材料库和特征长度计算模板,研究者可以快速组装模拟方案,自动化参数扫描与结果分析,从而将精力聚焦于物理问题本身,实现工作效率的指数级提升。 阅读详情

相关推荐

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6281

Joint Model (Intent+Slot)

0、BERT for Joint Intent Classification and Slot Filling 本文《BERT for Joint Intent Classification and Slot Filling》提出了使用BERT进行文本意图分类和槽位填充的任务,其结果达到了目前最好的成绩。 论文地址 github 地址 引言 意图识别/意图分类(Intent Cl...

小岁月太着急 8383

【OpenCV】手眼标定实战:从原理到calibrateHandEye的完整实现

本文详细解析了机器人视觉中的手眼标定原理与实战,重点介绍了如何使用OpenCV的calibrateHandEye函数实现从数据采集到结果验证的完整流程。文章深入剖析了AX=XB核心方程,区分了眼在手上与眼在手外两种配置,并提供了详细的代码示例与避坑指南,帮助开发者精准建立相机与机械臂末端的坐标转换关系,是机器人精准抓取的关键技术。

weixin_29046611的博客 510

UML入门4:类图

本节参考《UML2.0基础与RSA建模实例教程》曹衍龙、汪杰 有的人认为UML已经过时了,学UML纯粹是为了应付考试。 如果你也这么想,那就跟我想到一块儿了。不过这一节还是有一些概念是有用的。 比如,类的可见性。 类的可见性包括公有(Public)、私有(Private)、受保护(Protected)和包内公有(Package) 虽然本人并未使用过java语言,但是如果想对编程有更深层次的了解,我们需要知道这个知识点。 这篇博客介绍了python类的私有、公有 需要补充的是,python中的私有并不是很严格

frank_haha的博客 349

HDMI 2.1超高清传输背后的“隐形功臣”:深入浅出图解VESA DSC压缩核心流程

本文深入解析HDMI 2.1超高清传输中的VESA DSC压缩技术,揭示其如何在不损失画质的前提下实现带宽减半。通过切片并行处理和智能算法,DSC技术有效解决了8K/4K高帧率视频的传输瓶颈,成为现代显示设备不可或缺的“隐形功臣”。

weixin_30615767的博客 423

【嵌入式】树莓派部署NCNN的YOLOv5模型

树莓派部署NCNN框架的YOLOv5模型

Ace_Spade的博客 3783

Java 原始模型(Prototype)模式

一、什么是原型模式: 通过给出一个原型对象指明所要创建的对象的类型,然后通过复制这个原型对象来获取的更多的同类型的对象。 在Java语言中,支持原型模式,所有的对象都继承自Object对象,Object类提供一个clone()方法,它可以将JavaBean复制一份。所有要复制对象的类都要继承Cloneble接口,并实现继clone()方法才可以通过复制来获取自身更过的对象。如果一个对象没有实现...

weixin_30808253的博客 159

A Mathematical Framework for Transformer Circuits—(一)

transformer数学理解理论

qq_42208244的博客 2665

原始模型模式(Prototype)

原始模型模式(Prototype) 1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 2.适用性 当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式;以及 当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者 为了避免创建一个与产品类层次平行的工厂类层次时;或者 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 3.结构 4.代码 package prototype

Go的全部 619

GeoServer改造Springboot源码一(公共部分)

今天开始开启关于GeoServer的一个全新系列,主要是把改造Springboot后的详细代码粘贴出来,此文应配合《》系列共同阅读,按照前系列的时间顺序结合此系列的源码展示可以快速构建GeoServer功能的二次封装的后端系统。

龙井的专栏 1903

C#与倍福Plc通信——使用仿真软件模拟倍福PLC运行

安装这个软件之前先安装VisualStudio,本文安装这个软件时已经安装了VisualStudio2019。1、下载倍福PLC编程软件TwinCAT。

qq_34059233的博客 3664

原始模型模式(PROTOTYPE)

[size=large]原始模型模式,我认为也可以称为克隆模式,就是由一个完整的产品对象复制出另一个对象的模式。它也是对象的创建模式,但是只与原始对象有关,不需要工厂类。 原始模型模式最成功的应用之一就是Object类的clone方法,可能由于这种方法的存在,很多人没有意识到原始模型模式是一种特定的创建模式。但是,它的确是一种产生对象的模式,而且clone方...

pb_watercuizhen的博客 181

2024年游戏策划最新面试题及答案

1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。

guo162308的博客 2321

原始模型模式

原始模型模式: <o:p> 参考书籍:阎老师的<<java与模式>></o:p> <o:p>网络文章:追mme与java的23个模式 </o:p> 定义:通过一个原始模型的对象来指明索要创建的类型 然后用复制这个原始类型的方法创造出更多的同类型的对象 <o:p> </o:p> 个人理解:

heiren3821 305

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

(C++设计模式) ------原始模型模式 Prototype -- 创建型模式

C++设计模式) ------原始模型模式 Prototype

@奮 鬥@的专栏 1616

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Memento模式与Prototype模式结合

我在另一个网站上的文章: http://www.matrix.org.cn/thread.shtml?topicId=5c99e4e2-90d7-11dc-b8c0-a384f0e97a57&forumId=20 我刚开始学习设计模式,参考jdon的设计模式这本书,里面关于 Memento模式的例子如下(本人稍加修改): 1. 原始数据类 [code="java"]public...

碧清世界,有我,还有你。 217

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

设计模式-原型模式 Prototype Pattern

通常,如果需要快速复制对象并且对象的创建成本较高,或者需要创建多个相似但不完全相同的对象,原型模式是一个更好的选择。原型模式(Prototype Pattern)是一种创建型设计模式,它允许你通过复制现有的对象来创建新的实例,而不是通过新建的方式来构造。使用原型模式可以提高对象创建的效率,降低系统的资源消耗,并有助于实现对象的快速复制和灵活管理。然而,需要注意的是,原型模式可能会增加内存消耗,并且在处理包含引用类型成员的对象时需要特别小心,以避免浅拷贝导致的问题。

wesigj的博客 1699

《Java与模式》选读“原始模型(Prototype)模式”

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 461

Design Pattern: Prototype 模式

学习是分享和合作式的! 转载请注明出处:http://blog.youkuaiyun.com/wdzxl198/article/details/9223275; 文章摘自: http://www.riabook.cn/doc/designpattern/; 您从图书馆的期刊从发现了几篇您感兴趣的文章,由于这是图书馆的书,您不可以直接在书中作记号或写字,所以您将当中您所感兴趣的几个主题影印出来,这

Atlas2013的专栏 2019

设计模式初探-Prototype模式

Prototype模式,也称原型模式,属于对象创建型模式。通过使用原型实例指定创建对象的种类,然后拷贝这些原型来创建新的对象。Prototype模式允许一个对象再创建另一个可定制的对象,即使不知道任何创建的细节,就像JavaScript中通过prototype原型公用基本的方法或属性,然后在克隆后的原型基础上添加自己的定制。 一、使用场景 1、当一个系统应该独立于它的产品创建,构成和表示时,这

Java Dynamic的专栏 1957

元学习领域的prototype介绍

在元学习框架下的原型(prototype)可以被用作快速适应新任务的关键。prototype通过在不同任务上训练实现对支持集(support set)中的新样本进行特征学习,提炼新样本信息,在不干扰既有检测模型参数的情况下以诸如挂件的形式植入检测框架中,有效避免了原模型的退化和重头训练的资源损耗,实现对新旧样本的高准确度检测.

m0_67832368的博客 1841

设计模式与泡mm的关系之Prototype原型模式及原型模式的再思考

  我跑我跑我跑 网上的原文如下:4、PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或

Kisser Loves C++ 732

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

原型模式是一种创建型设计模式,通过复制已有对象来创建新对象,避免代码依赖具体类。它适用于需要动态创建对象、减少类层次结构或避免重复初始化复杂对象的场景。实现方式包括浅克隆(仅复制基本类型和引用)和深克隆(递归复制所有引用对象),后者可通过序列化或手动实现。示例代码展示了文档对象的克隆,浅克隆会共享引用导致原始对象被修改,而深克隆则完全独立,确保对象状态的完整性。

d3y1`5 81_09 885

原型模式(Prototype Pattern)详解

原型模式是一种创建型设计模式,它允许我们通过复制(克隆)现有对象来创建新对象,而不是通过使用构造函数创建。原型模式的核心思想是基于现有对象创建新的对象,而不是从零开始创建。这种模式特别适用于创建对象成本较高的场景,或者需要创建大量相似对象的情况。通过克隆现有对象,可以避免重新执行初始化过程,从而提高性能。原型模式是一种强大的创建型设计模式,它允许通过克隆现有对象来创建新对象,避免了昂贵的对象创建过程。在Java中,我们可以通过实现Cloneable接口和重写clone()方法来实现原型模式。

yk_dflkg的博客 1702

设计模式第8讲——原型模式(Prototype)

原型模式属于创建型设计模式。 一、什么是原型模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现5.0 UML类图5.1 HeroSkill(英雄--具体原型类)5.2 StealManFactory(塞拉斯--客户端)5.3 TestPrototype六、总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 4941

prototype模式

http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html [b]Javascript 面向对象编程(一):封装[/b] Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(O...

wsswss1123的博客 290
上一篇: 3 建造(Builder)模式
下一篇: 5 适配器(Adapter)模式
O2AtomLife
博客等级 码龄19年 2粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值