原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中,复制对象是通过clone()实现的,先创建一个原型类:

public class Prototype implements Cloneable {public Object clone() throws CloneNotSupportedException {Prototype proto = (Prototype) super.clone();return proto;}
}

很简单,一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,因为Cloneable接口是个空接口,你可以任意定义实现类的方法名,如cloneA或者cloneB,因为此处的重点是super.clone()这句话,super.clone()调用的是Object的clone()方法,而在Object类中,clone()是native的,具体怎么实现,我会在另一篇文章中,关于解读Java中本地方法的调用,此处不再深究。在这儿,我将结合对象的浅复制和深复制来说一下,首先需要了解对象深、浅复制的概念:

浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。

深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。

此处,写一个深浅复制的例子:

public class Prototype implements Cloneable, Serializable {private static final long serialVersionUID = 1L;private String string;private SerializableObject obj;/* 浅复制 */public Object clone() throws CloneNotSupportedException {Prototype proto = (Prototype) super.clone();return proto;}/* 深复制 */public Object deepClone() throws IOException, ClassNotFoundException {/* 写入当前对象的二进制流 */ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(this);/* 读出二进制流产生的新对象 */ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bis);return ois.readObject();}public String getString() {return string;}public void setString(String string) {this.string = string;}public SerializableObject getObj() {return obj;}public void setObj(SerializableObject obj) {this.obj = obj;}}class SerializableObject implements Serializable {private static final long serialVersionUID = 1L;
}

要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。

结构型模式(7种):用于描述如何将类或对象按某种布局组成更多的结构。

Java的二十三种设计模式(原型模式(Prototype))相关推荐

  1. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  2. Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)

    从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析. 创建型模式(5种):用于描述"怎样创建对象",它的主要特点是& ...

  3. Java的二十三种设计模式

    设计模式介绍及Java描述 概述 设计模式是针对某一类问题的最优解决方案,是从许多优秀的软件系统中总结出的. Java中设计模式(java design patterns)通常有23种. 模式可以分成 ...

  4. Java的二十三种设计模式(建造者模式(Builder))

    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...

  5. Java的二十三种设计模式(适配器模式(Adapter)、对象的适配器模式)

    适配器模式(Adapter) 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式 ...

  6. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  7. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  8. Java二十三种设计模式 之代理(proxy)

    Java二十三种设计模式 之代理(proxy) 今天我们学习一下静态代理和动态代理 我们来看代码(写一个坦克运行了多少时间): 第一种方法: public calss Tank implements ...

  9. 第二部分:二十三种设计模式解读——什么是工厂方法模式

    二十三种设计模式解读--什么是工厂方法模式 author:陈镇坤27 日期:2022年2月10日 修改日期:2022年6月23日 文章目录 二十三种设计模式解读--什么是工厂方法模式 一.工厂方法模式 ...

最新文章

  1. Java并发编程之线程状态总结
  2. 266. Palindrome Permutation
  3. Array String对象的方法和属性
  4. ArcObjects中的几何对象简介(一)
  5. Python入门100题 | 第043题
  6. java pattern用法_Java Pattern和Matcher用法
  7. 《Linux与unix Shell编程指南》 总结
  8. js一键批量打印_js批量打印文件夹
  9. 又偷偷夹带反战私货!npm生态还能信任吗?
  10. 计算机技巧网站,13个实用电脑技巧汇总
  11. 六句顺口溜教你速记100以内质数表
  12. hutool对称加密
  13. 安卓APK反编译详解(多图)
  14. CAD制图技巧,如何旋转图形?
  15. 性能测试第七课--用户定义变量用户参数
  16. 服务器租用前如何测试网络速度?
  17. Sublime Text 3 汉化包 +注册码
  18. vue引用QrCode生成二维码
  19. 苏格拉底的苹果_喻道故事:一只没有香气的苹果
  20. Z变换(Z-transform)

热门文章

  1. android 4个点矫正不规则矩形_Android使用FragmentTabHost实现中间按钮凸出效果
  2. js中函数的参数为函数的情况即回调函数
  3. 创建自己的Vagrant box
  4. $.post $.getScript
  5. Sql Server 连接池及其用法
  6. A multi-faceted language for the Java platform
  7. Hash(4) hashtable,hashmap
  8. 编译php的时候,报configure: error: mcrypt.h not found. Please reinstall libmcrypt.错误的解决办法...
  9. log4j配置日志系统成功 (转)
  10. LINUX操作系统手机刷机包制作、修改方法