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

上海网站建设 浦东搜索引擎营销成功案例

上海网站建设 浦东,搜索引擎营销成功案例,昌邑市建设局网站,郑州个人网站开发1、定义 原型模式是一种创建型模式,用于创建重复的对象,并且保证性能。原型模式创建的对象是由原型对象自身创建的,是原型对象的一个克隆,和原型对象具有相同的结构和相同的值。 2、适用场景 创建对象时我们不仅仅需要创建一个新…

1、定义
原型模式是一种创建型模式,用于创建重复的对象,并且保证性能。原型模式创建的对象是由原型对象自身创建的,是原型对象的一个克隆,和原型对象具有相同的结构和相同的值。

2、适用场景

  1. 创建对象时我们不仅仅需要创建一个新的对象,可能我们还需要对象创建出来里面的值和某一个对象也要完全一致,原型模式可以保证结构和值都相同。
  2. 创建对象时我们希望对创建出来的对象的修改不影响到原来的对象,可能通过原型模式进行创建,进行深度克隆。
  3. 创建对象时,如果对象是个复杂对象,里面又包含了其他的复杂对象,我们希望创建的对象和原有对象保持一致,传统模式new会非常麻烦,还需要考虑到里面其他的复杂对象,这时候可以使用原型模式进行创建。

3、 原型模式的核心是就是原型类 Prototype,Prototype 类需要具备以下两个条件:

  • (1)实现 Cloneable 接口:在 Java 中 Cloneable 接口的作用就是在运行时通知虚拟机可以安全地在实现了 Cloneable 接口的类上使用 clone() 方法,只有在实现了 Cloneable 的类才可以被拷贝,否则在运行时会抛出 CloneNotSupportedException 异常。
  • (2)重写 Object 类中的 clone() 方法:Java 中所有类的父类都是 Object,Object 中有一个clone() 方法用于返回对象的拷贝,但是其作用域 protected,一般的类无法调用,因此,Prototype 类需要将 clone() 方法的作用域修改为 public。

​ 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。

4、注意事项

(1)使用原型模式复制对象不会调用类的构造函数,对象是通过调用 Object 类的 clone() 方法来完成的,它直接在内存中复制数据。不但构造函数不会执行,甚至连访问权限都对原型模式无效。单例模式中,需要将构造函数的访问权限设置为 private,但是 clone() 方法直接无视构造方法的权限,所以单例模式与原型模式是冲突的,在使用时需要注意。

(2)深拷贝与浅拷贝。Object 类的 clone() 方法只会拷贝对象中的基本的数据类型(8种基本数据类型 byte,char,short,int,long,float,double,boolean 和对应的封装类),对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。

  • 浅拷贝:只克隆对象中的基本数据类型,而不会克隆数组、容器、引用对象等。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。如果变量为String字符串,则拷贝其引用地址,但是在修改的时候,它会从字符串池中重新生成一个新的字符串,原有的字符串对象保持不变。
  • 深拷贝:把要克隆的对象所引用的对象都克隆了一遍。

代码实例


/*** @Author charles.yao* @Description* @Date 2023/2/13 14:54*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Animal implements Cloneable {private String userName;private String userAge;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}/*** @Author charles.yao* @Description 浅拷贝类* @Date 2023/2/13 14:53*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class UserInfo implements Cloneable {private String userName;private String userAge;private Animal animal;@Overrideprotected UserInfo clone() throws CloneNotSupportedException {UserInfo userInfo = (UserInfo) super.clone();userInfo.setAnimal((Animal) animal.clone());return userInfo;}
}/*** @Author charles.yao* @Description 浅拷贝测试* @Date 2023/2/13 14:57*/
public class DeepCopyTest {public static void main(String[] args) {try {UserInfo userInfo = new UserInfo();userInfo.setUserName("张三");userInfo.setUserAge("1223");userInfo.setAnimal(new Animal("111", "2122"));UserInfo clone = userInfo.clone();System.out.println("原数据" + userInfo.toString());System.out.println("拷贝之后" + clone.toString());System.out.println(userInfo == clone);System.out.println(userInfo.getAnimal() == clone.getAnimal());userInfo.getAnimal().setUserName("二狗");System.out.println("原数据动物" + userInfo.getAnimal().toString());System.out.println("拷贝之后动物" + clone.getAnimal().toString());} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}

运行结果

原数据UserInfo(userName=张三, userAge=1223, animal=Animal(userName=111, userAge=2122))
拷贝之后UserInfo(userName=张三, userAge=1223, animal=Animal(userName=111, userAge=2122))
false
false
原数据动物Animal(userName=二狗, userAge=2122)
拷贝之后动物Animal(userName=111, userAge=2122)
http://www.tj-hxxt.cn/news/89192.html

相关文章:

  • 百度网站收录珠海网络推广公司
  • 佛山仿站定制模板建站任务放单平台
  • 阿里云建站视频windows优化大师下载
  • 如何免费建造网站前端seo优化
  • 为什么做网站还要续费企业推广公司
  • 茌平网站建设电话市场推广工作内容
  • 网站需求分析怎么做今日重大事件
  • 2021年网站有人分享吗市场监督管理局投诉电话
  • 做网站用采集营销方案设计思路
  • 广西企业建站站长查询域名
  • 东莞网站建设定制太原seo顾问
  • 网站不备案怎么回事宁波品牌网站推广优化
  • 网站404做多大百度怎么优化网站排名
  • 番禺网站开发公司app推广接单平台
  • 北海建设厅网站网站搭建服务
  • 关于小学网站建设的论文优化seo报价
  • 六年级做的网站的软件下载中文域名交易网站
  • 贵阳做网站cncolour新产品的推广销售方法
  • 现在一般做网站都是去哪家做的手机网页制作app
  • 网站首页如何设计时事政治2023最新热点事件
  • 青岛北京网站建设价格网络营销的主要传播渠道
  • 高端网站开发哪里好备案域名查询
  • 专业做网站建设公司好吗百度推广登录平台客服
  • 服装公司网站网页设计新东方烹饪学校学费一年多少钱
  • 呼和浩特网站建设信息甘肃seo技术
  • 工行网站如何做理财风险评估seo优化技术教程
  • 三只松鼠建设网站前的市场分析竞价账户托管公司
  • 小型网站用typescript广州新闻最新消息今天
  • 廊坊网站建设价格软件外包网站
  • 曲靖网站建设公司app推广联盟平台