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

《java与模式》学习系列——原始模型模式

 

一、 原始 (Prototype)模式结构图

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多的对象。原始模型模式有两种表现形式:第一种是简单形式,第二种是登记形式。

简单形式结构图如下:

登记形式:

两种形式比较:

如果创建的原型对象数目较少而且比较固定的话,可以采取简单形式的原始模型模式。

如果创建的原型对象数目不固定的话,可以采取登记形式的原型模式。在这种情况下,客户端并不保存对原型对象的引用,这个任务被交给管理员对象。

 

浅复制和深复制

浅复制仅仅福之所考虑的对象,而不复制它所引用的对象。

深复制中那些引用其他对象的变量将指向被复制过的新对象,也就是深复制把要复制的对象所引用的对象都复制了一遍。

二、 原始模式在java中的应用

Java中的对象复制

Java语言的构件模型直接支持原始模型模式。尽管Object类提供了一个clone()方法,可以将一个javaBean对象复制一份,但是这个JavaBean必须实现一个标识接口Cloneable

一般而言,clone()方法满足一下的描述:

1、  对任何的对象x,都有:x.clone()!=x。换言之,克隆对象与原对象不是同一个对象。

2、  对任何的对象下,都有:x.clone().getClass==x.getClass(),换言之,克隆对象与原对象的类型一样

3、  如果对象xequals()方法定义合适的话,那么x.clone().equals(x)应当成立。

三、 原始模型模式的优点

1、  原始模型模式允许动态地增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此,增加新产品的对整个结构没有影响。

2、  原始模型模式提供简化的创建结构。工厂方法模式常常需要有一个与产品类等级相同的结构,而原始模型模式就不需要这样。

3、  具有给一个应用软件动态加载新功能的能力。

4、  产品类不需要非得有任何事先确定的等级结构,因为原始模型模式适用于任何的等级。

 

相关文章:

  • 20145326蔡馨熠《信息安全系统设计基础》第11周学习总结
  • 《java与模式》学习系列——合成模式
  • 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较
  • 《java与模式》学习系列——代理模式
  • 5种必知的大数据处理框架技术
  • 《java与模式》学习系列——策略模式
  • mysql:字符串转换为日期类型
  • 《java与模式》学习系列——模版方法模式
  • 《java与模式》学习系列——备忘录模式
  • 向量加减法运算及其几何意义
  • 关于 Java 中 finally 语句块的深度辨析
  • Linux 基础(一)
  • Windows 7 应用程序exe图标丢失的修复
  • 算法导论学习笔记——堆排序
  • 让Docker容器使用静态独立的外部IP(便于集群组建)
  • Docker 笔记(2):Dockerfile
  • eclipse(luna)创建web工程
  • Flannel解读
  • If…else
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java 多线程基础, 我觉得还是有必要看看的
  • Linux中的硬链接与软链接
  • mockjs让前端开发独立于后端
  • overflow: hidden IE7无效
  • Python实现BT种子转化为磁力链接【实战】
  • Vultr 教程目录
  • 前端设计模式
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 携程小程序初体验
  • Mac 上flink的安装与启动
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • python最赚钱的4个方向,你最心动的是哪个?
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (33)STM32——485实验笔记
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (三分钟)速览传统边缘检测算子
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)关于pipe()的详细解析
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(六):替换字符串中匹配的子串
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net Remoting(分离服务程序实现) - Part.3