ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式~原始模型模式

2020-08-12 08:01:35  阅读:242  来源: 互联网

标签:Prototype Java 角色 对象 模型 原型 原始 设计模式 clone


原始模型(Prototype)模式属于对象的创建模式。

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原始模型模式的用意。

Java对象的复制

Java的所有类都是从 java.lang.Object 类继承而来的,而 Object 类提供下面的方法对对象进行复制:

protected Object clone()

子类也可以把这个方法置换掉,提供满足自己需要的复制方法。

Java语言提供的Cloneable接口只有一个作用,就是在运行时期通知Java虚拟机可以安全的在这个类上使用 clone() 方法。

由于Object 类本身并不实现 Cloneable 接口,因此如果所考虑的类没有实现Cloneable接口时,调用 clone() 方法会抛出 CloneNotSupportedException 异常。

克隆满足的条件

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

  1. 对任何的对象 x , 都有: x.clone() != x 。 也就是说,克隆对象与原对象不是同一个对象。
  2. 对任何的对象 x , 都有: x.clone().getClass == x.getClass(), 也就是说克隆对象与原对象的类型一样。
  3. 如果对象的 x 的 equals()方法定义恰当的话,x.clone().equals(x) 应当是成立的。

简单形式的原始模型模式

 

 涉及三个角色:

  • 客户角色(Client):客户类提出创建对象的请求。
  • 抽象原型角色(Prototype): 这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有具体原型类所需的接口。
  • 具体原型角色(Concrete Prototype): 被复制的对象。此角色需要实现抽象的原型角色所要求的接口。

示意性源码

 

 

 

 

登记形式的原始模型模式

 角色如下:

  • 客户端角色(Client): 客户端类向管理员提出创建对象的请求。
  • 抽象原型角色(Prototype):此角色给出所有具体原型类所需的接口。
  • 具体原型角色(Concrete Prototype): 被复制的对象。需要实现抽象的原型角色所要求的接口。
  • 原型管理器角色(Prototype Manager): 创建具体原型类的对象,并记录每一个被创建的对象

 

 

 

 

 

 

 

 两种形式的比较

如果需要创建的原型对象数目较少而且比较固定,可以采用第一种形式,即简单形式的原始模型模式。这种模式中,原型对象的引用可以由客户端自己保存。

如果要创建的原型对象数目不固定的话,可以采用第二种形式,即登记形式的原始模型模式。这种模式中,由管理员保存原型对象的引用。

 

标签:Prototype,Java,角色,对象,模型,原型,原始,设计模式,clone
来源: https://www.cnblogs.com/Vincent-yuan/p/13488520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有