本文主要是介绍JAVA设计模式之【原型模式】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
快速构建对象方法:
使用简单工厂将get,set封装到某个方法中(Client类)
JDK提供实现Cloneable接口实现快速复制
1 类图
2 适用场景
1、类初始化消耗资源较多。
2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
3、构造函数比较复杂。
4、循环体中生产大量对象时。
3 原型模式案例
BeanUtils.copy();
JSON.parseObject()
4 深浅克隆
4.1 浅克隆
创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
4.1.2 浅克隆代码案例
必须让目标类实现Cloneable接口,重写java.lang.Object的clone()
@Override
public Object clone() throws CloneNotSupportedException {return super.clone();
}
4.2 深克隆
创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
4.2.2 深克隆代码案例
@Override
public Object clone() throws CloneNotSupportedException {try {ByteArrayOutputStream out = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(out);oos.writeObject(this);oos.close();//从内存中取出byte[] bb = out.toByteArray();ByteArrayInputStream in = new ByteArrayInputStream(bb);ObjectInputStream ois = new ObjectInputStream(in);Object clone = ois.readObject();ois.close();return clone;} catch (Exception e) {throw new RuntimeException(e);}
}
4.3 克隆会破坏单例模式
4.3.1 解决方式
要么单例类不实现Cloneable 接口;要么重写 clone()方法,在 clone 方法中返回单例对象即可。
@Override
protected Object clone() throws CloneNotSupportedException {return this.deepClone();
}
绿色软件搜索【谷丘Coder】后台发送【原型模式】获取笔记资料与思维导图
这篇关于JAVA设计模式之【原型模式】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!