JAVA设计模式之原型模式
来源:互联网 发布:淘宝绿松石微信骗 编辑:程序博客网 时间:2024/06/15 03:07
一、原型模式的定义
原型模式的简单程度仅次于单例模式和迭代器模式。因为简单,所以使用的场景才比较多 :
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式的核心是一个 clone 方法,通过该方法来进行对象的拷贝,Java提供了一个Cloneable接口来标示这个对象是可拷贝的,当然有的对象是没有的如果我们想拷贝怎么办呢 ? 我们就只需要重写 clone 方法就可以啦!
二、原型模式的优点
1、性能优良
原型模式是在内存二进制流的拷贝,要比直接 new 一个对象性能好很多,特别是要在一个循环体内产生大量的对象,原型模式可以更好的体现其优点。
2、逃避构建函数的约束
它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的
优点 : 就是减少了约束
缺点 : 也是减少了约束
三、原型模式的使用场景
1、资源优化场景
类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。
2、性能和安全要求的场景
通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
3、一个对象多个修改者的场景
一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。
四、原型模式的注意事项
1、构造函数不会被执行
2、深拷贝和浅拷贝
深拷贝 : 对私有的类变量进行独立的拷贝
浅拷贝 : clone只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝就叫做浅拷贝
3、clone 和 final 两个关键字是有冲突的
代码 :
原型类
public class Prototype implements Cloneable { public Object clone() throws CloneNotSupportedException { Prototype proto = (Prototype) super.clone(); return proto; } }
一个复制的例子
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; }
通过以上的资料大家应该对原型模式有一个新的认识了吧 ! 有误的地方请指出 , 谢谢!
- java设计模式之原型设计模式
- java 设计模式之原型模式Prototype
- Java:设计模式之原型模式(Prototype)
- java设计模式之原型模式
- java设计模式之原型模式
- java设计模式之原型模式
- 【Java设计模式】之原型模式
- java设计模式笔记之原型模式
- Java设计模式之原型模式(7)
- Java--设计模式之原型模式
- JAVA设计模式之原型模式
- Java设计模式之原型模式
- JAVA设计模式之原型模式
- JAVA设计模式之原型模式
- java之设计模式---原型模式
- java设计模式之原型模式
- 《Java设计模式》之原型模式
- JAVA设计模式之原型模式
- C系列总结2 & 剖析整型、浮点型数据在内存中的存储
- 1069. The Black Hole of Numbers (20)
- XCODE DEBUG 技巧
- Windows 下 Python + MySQL 的安装及操作方法
- java操作postgreSql遇到的问题
- JAVA设计模式之原型模式
- 重要题目
- 了解Node.js
- awk命令详解
- 成为高级Java工程师
- 使用maven做文件的合并和替换
- 《Java设计模式之命令模式》
- spring+springMvc+hibernate+ajax二级菜单关联
- java8中DateTime类功能简介