原型模式
黑马程序员:https://www.bilibili.com/video/BV1Np4y1z7BU?p=46
概述
用一个已经创建的实例作为原型,通过赋值该原型对象来创建一个和原型对象相同的新对象。
结构
原型模式包含的角色:
- 抽象原型类:规定了具体原型对象必须实现的clone()方法;
- 具体原型类:实现抽象原型类clone()方法,它是可以被复制的对象;
- 访问类:使用具体原型类中的clone()方法来复制新的对象。
分类
- 浅克隆:
创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址 - 深克隆
创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
Java中的Object类中提高了clone()
方法来实现浅克隆。Cloneable 接口是上面的类图中的抽象原型类,而实现了Cloneable接口的子实现类就是具体的原型类。
浅克隆
应用场景
- 对象的创建非常复杂,可以使用原型模式快捷的创建对象;
- 性能和安全要求比较高。
引例
uml类图
Realizetype(具体原型类)
/*
具体原型类
*/
public class RealizeType implements Cloneable {
public RealizeType(){
System.out.println("具体原型对象创建完成!");
}
@Override
protected RealizeType clone() throws CloneNotSupportedException {
System.out.println("原型对象复制成功");
return (RealizeType) super.clone();
}
}
Client(访问类)
public class Client {
public static void main(String[] args) throws CloneNotSupportedException {
//创建一个原型类对象
RealizeType realizeType = new RealizeType();
//调用clone方法进行克隆
RealizeType clone = realizeType.clone();
//判断是否为同一个对象
System.out.println(realizeType==clone)