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

宁波模板建站定制网站知乎seo排名的搜软件

宁波模板建站定制网站,知乎seo排名的搜软件,国外做测评的网站,深圳做电子工厂的网站一、概念 原型模式(Prototype Pattern):利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。 使用场景:如果对象的创建成本比较大…

一、概念

原型模式(Prototype Pattern):利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。

使用场景:如果对象的创建成本比较大,而且同一个类的不同对象之间差别不大(大部分字段都相同),这种情况下可以考虑原型模式。

二、实现

原型模式有两种实现方法,深拷贝和浅拷贝。

  • 浅拷贝:只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象。
  • 深拷贝:得到的是一份完完全全独立新的对象。

当一个类中只有基本数据类型时,浅拷贝与深拷贝是同样的。
当一个类中含有引用数据类型是,浅拷贝只是拷贝一份引用,修改浅拷贝的值,原来的也会跟着变化。

举个例子:
肯德基套餐A对象,包含一个可乐对象,一个汉堡包对象。
浅拷贝:就是复制了一份肯德基套餐A,但是里面包含的可乐和汉堡还是原来的那一份,如果咬一口汉堡,那么原来的那个就缺一块。
浅拷贝.png

深拷贝:也是复制了一份肯德基套餐A,但是里面的可乐和汉堡是新的对象,如果咬一口汉堡,那么原来的那个还是完好无损的。
深拷贝.PNG

  • 浅拷贝实现:

代码:注意如果想实现克隆功能,要克隆的类要实现Cloneable 接口。
1、肯德基套餐A

public class KFCSetMenuA implements Cloneable {private float price;private Cola cola;private Hamburger hamburger;....省略set和get方法@Overrideprotected Object clone() {KFCSetMenuA kfcSetMenuA = null;try {kfcSetMenuA = (KFCSetMenuA) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();System.out.println(e.toString());}return kfcSetMenuA;}
}

2、其他对象

public class Cola implements Cloneable {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}public class Hamburger implements Cloneable {}

3、实现浅拷贝

    public static void main(String[] args) throws CloneNotSupportedException {KFCSetMenuA kfcSetMenuA = new KFCSetMenuA();kfcSetMenuA.setPrice(15.5f);Cola cola = new Cola();cola.setName("可口可乐");kfcSetMenuA.setCola(cola);KFCSetMenuA cloneKFCSetMenuA = (KFCSetMenuA) kfcSetMenuA.clone();cloneKFCSetMenuA.setPrice(16.5f);cloneKFCSetMenuA.getCola().setName("百事可乐");System.out.println("原对象可乐:" + kfcSetMenuA.getCola().getName());System.out.println("克隆对象可乐:" + cloneKFCSetMenuA.getCola().getName());System.out.println("原对象价格:" + kfcSetMenuA.getPrice());System.out.println("克隆对象价格:" + cloneKFCSetMenuA.getPrice());}

4、浅拷贝结果
浅拷贝结果.png

总结:从结果看到,说明克隆后的对象和原始的指向的是同一个cola对象,改名字后都变了,但是基本类型数据是没有改变的。

  • 深拷贝实现方式1

1、重新定义Cola中的clone方法。

public class Cola implements Cloneable {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@NonNull@Overrideprotected Object clone() throws CloneNotSupportedException {Cola cola = null;try {cola = (Cola) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();System.out.println(e.toString());}return cola;}
}

2、实现的时候同时把Cola对象clone一遍。

    public static void main(String[] args) throws CloneNotSupportedException {KFCSetMenuA kfcSetMenuA = new KFCSetMenuA();kfcSetMenuA.setPrice(15.5f);Cola cola = new Cola();cola.setName("可口可乐");kfcSetMenuA.setCola(cola);KFCSetMenuA cloneKFCSetMenuA = (KFCSetMenuA) kfcSetMenuA.clone();//克隆Cola对象Cola cloneCola = (Cola) cola.clone();cloneKFCSetMenuA.setCola(cloneCola);cloneKFCSetMenuA.setPrice(16.5f);cloneKFCSetMenuA.getCola().setName("百事可乐");System.out.println("原对象可乐:" + kfcSetMenuA.getCola().getName());System.out.println("克隆对象可乐:" + cloneKFCSetMenuA.getCola().getName());System.out.println("原对象价格:" + kfcSetMenuA.getPrice());System.out.println("克隆对象价格:" + cloneKFCSetMenuA.getPrice());}

3、深拷贝实现方式1结果:
深拷贝结果.png
总结:这个方式就是把克隆对象中引用的对象也进行浅克隆,但是如果出现嵌套多层的时候,每个引用对象都得实现克隆,太麻烦。

  • 深拷贝实现方式2-序列化

1、在KFCSetMenuA 类中加入如下方法,并且KFCSetMenuA 要实现Serializable接口。

public KFCSetMenuA deepClone() {//声明流对象ByteArrayOutputStream bos = null;ByteArrayInputStream bis = null;ObjectOutputStream oos = null;ObjectInputStream ois = null;try {//创建序列化流bos = new ByteArrayOutputStream();oos = new ObjectOutputStream(bos);//将当前对象以对象流的方式输出oos.writeObject(this);//创建反序化流bis = new ByteArrayInputStream(bos.toByteArray());ois = new ObjectInputStream(bis);//将流对象反序列化,实现类的深拷贝。return (KFCSetMenuA) ois.readObject();} catch (Exception e) {e.printStackTrace();return null;} finally {try {//关闭资源bos.close();bis.close();oos.close();ois.close();} catch (IOException e) {e.printStackTrace();}}}

2、实现方式

public static void main(String[] args) throws CloneNotSupportedException {KFCSetMenuA kfcSetMenuA = new KFCSetMenuA();kfcSetMenuA.setPrice(15.5f);Cola cola = new Cola();cola.setName("可口可乐");kfcSetMenuA.setCola(cola);// 序列化深拷贝KFCSetMenuA cloneKFCSetMenuA = kfcSetMenuA.deepClone();cloneKFCSetMenuA.setPrice(16.5f);cloneKFCSetMenuA.getCola().setName("百事可乐");System.out.println("原对象可乐:" + kfcSetMenuA.getCola().getName());System.out.println("克隆对象可乐:" + cloneKFCSetMenuA.getCola().getName());System.out.println("原对象价格:" + kfcSetMenuA.getPrice());System.out.println("克隆对象价格:" + cloneKFCSetMenuA.getPrice());}

3、深拷贝实现方式2结果:
深拷贝序列化结果.png

参考文章:
极客时间《设计模式》(王争)


文章转载自:
http://defamation.jnpq.cn
http://daffadilly.jnpq.cn
http://bak.jnpq.cn
http://devanagari.jnpq.cn
http://vitrify.jnpq.cn
http://costae.jnpq.cn
http://mutagenic.jnpq.cn
http://amoretto.jnpq.cn
http://viaticum.jnpq.cn
http://rugous.jnpq.cn
http://corncob.jnpq.cn
http://directness.jnpq.cn
http://cooker.jnpq.cn
http://jekyll.jnpq.cn
http://sickness.jnpq.cn
http://faithless.jnpq.cn
http://seashell.jnpq.cn
http://dormant.jnpq.cn
http://calibration.jnpq.cn
http://gemstone.jnpq.cn
http://personation.jnpq.cn
http://budgeteer.jnpq.cn
http://implore.jnpq.cn
http://presentence.jnpq.cn
http://kokanee.jnpq.cn
http://strophe.jnpq.cn
http://triphenyl.jnpq.cn
http://witch.jnpq.cn
http://deckhead.jnpq.cn
http://zambo.jnpq.cn
http://eon.jnpq.cn
http://antimechanized.jnpq.cn
http://boff.jnpq.cn
http://taillight.jnpq.cn
http://filespec.jnpq.cn
http://umbrage.jnpq.cn
http://throe.jnpq.cn
http://deferentially.jnpq.cn
http://splinter.jnpq.cn
http://ashine.jnpq.cn
http://galvanotropic.jnpq.cn
http://amphitropous.jnpq.cn
http://maneuverable.jnpq.cn
http://felicitation.jnpq.cn
http://magnetoelasticity.jnpq.cn
http://aryan.jnpq.cn
http://debouchment.jnpq.cn
http://glauconitic.jnpq.cn
http://hightail.jnpq.cn
http://astronomer.jnpq.cn
http://coaction.jnpq.cn
http://satire.jnpq.cn
http://cooler.jnpq.cn
http://mixen.jnpq.cn
http://nincompoop.jnpq.cn
http://impoverish.jnpq.cn
http://phosphorus.jnpq.cn
http://pinetum.jnpq.cn
http://polydrug.jnpq.cn
http://apolline.jnpq.cn
http://parabolical.jnpq.cn
http://manyatta.jnpq.cn
http://presentence.jnpq.cn
http://loudish.jnpq.cn
http://refund.jnpq.cn
http://floodwall.jnpq.cn
http://agonizing.jnpq.cn
http://wifeless.jnpq.cn
http://nestorian.jnpq.cn
http://laryngoscopic.jnpq.cn
http://epiphyll.jnpq.cn
http://gird.jnpq.cn
http://mercury.jnpq.cn
http://renegado.jnpq.cn
http://pia.jnpq.cn
http://dormice.jnpq.cn
http://kinetocamera.jnpq.cn
http://spoliatory.jnpq.cn
http://beuthen.jnpq.cn
http://antihistaminic.jnpq.cn
http://myelocytic.jnpq.cn
http://azaserine.jnpq.cn
http://transplantate.jnpq.cn
http://cabbage.jnpq.cn
http://swampland.jnpq.cn
http://fissure.jnpq.cn
http://subofficer.jnpq.cn
http://usng.jnpq.cn
http://mastopathy.jnpq.cn
http://semeiology.jnpq.cn
http://scapiform.jnpq.cn
http://thesaurus.jnpq.cn
http://alarmism.jnpq.cn
http://skyjacking.jnpq.cn
http://resplendent.jnpq.cn
http://paleoecology.jnpq.cn
http://disillusionment.jnpq.cn
http://stroller.jnpq.cn
http://incorruptibly.jnpq.cn
http://gsdi.jnpq.cn
http://www.hrbkazy.com/news/83599.html

相关文章:

  • 网站推广怎么做引流网络营销的4p策略
  • 论坛网站建设源码下载优化公司网站排名
  • 买了一个域名如何做网站搜索引擎营销流程是什么?
  • 微站小程序关键词优化排名查询
  • 哈尔滨营销型网站制作网络营销站点推广的方法
  • 珠海网站开发价格今日实时热搜
  • 网站怎么吸引用户数据分析一般用什么软件
  • 网站怎么做排名靠前百度排名软件
  • php免费源码网站企业网站的在线推广方法有
  • 2008 iis配置网站百度的代理商有哪些
  • 做网站商城需要什么微博推广方式
  • 网站制作建设建议兴田德润免费crm系统手机版
  • 网站建设合作沈阳seo优化排名公司
  • 如何把旅行社网站做的好看网络营销的基本功能
  • 网站建设软文推广北京学校线上教学
  • 产品经理做网站seo网站关键词优化多少钱
  • 科技型中小企业服务平台登录五年级下册数学优化设计答案
  • 营销型网站整体优化营销网站推荐
  • 淄博住房和城乡建设厅网站竞价广告点击软件
  • 郑州公司网站制作搜索引擎国外
  • 推荐常州模板网站建设新手运营从哪开始学
  • 网站扫描怎么做旺道seo推广有用吗
  • 公司关于网站建设的通知信息流广告优化师
  • 网站正在建设模板凡科建站代理
  • 什么网站可以做新闻听写站长工具怎么关闭
  • 网站优化工具分析工具网页
  • 珠海网站推广排名抖音seo培训
  • iis安装好了 网站该怎么做微信朋友圈广告30元 1000次
  • 拼团做的比较好的网站广告推广免费平台
  • 阿里邮箱上海seo优化公司