应用场景
先来说一下原型模式的应用场景
- 创建新对象成本较大,如初始化需要占用较长的时间,占用太多的CPU资源或网络资源。在这种情况下,可以通过原型模式对已有对象进行复制来获得新对象,如果是相似对象,可以对其成员变量稍作修改。
- 在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。
实现步骤
- 实体类要实现一个Cloneable的接口
- 重写clone方法
- 在client类中创建原型对象
这是一个奖状类,通过学生的
java
package com.设计模式.原型模式.demo;
/**
* Created with IntelliJ IDEA.
*
* @Author: Coderfine
* @Date: 2023/10/08/19:03
* @Description:这是一个三好学生的奖状类
*/
public class Citation implements Cloneable{
//三号学生的姓名
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Citation clone() throws CloneNotSupportedException {
return (Citation) super.clone();
}
public void show(){
System.out.println(name+"同学......................");
}
}
测试类
java
package com.设计模式.原型模式.demo;
/**
* Created with IntelliJ IDEA.
*
* @Author: Coderfine
* @Date: 2023/10/08/19:05
* @Description:使用场景,创建对象比较复杂的话可以使用原型对象来进行克隆
*/
/*
这是一个String类型的演示
*/
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
//创建原型对象
Citation citation = new Citation();
//克隆奖状对象
Citation clone = citation.clone();
citation.setName("alibaba");
clone.setName("范小勤");
clone.show();
citation.show();
}
}
就好像有一个模板,让后自己把业务的逻辑往里面放
深克隆和浅克隆
- 浅克隆:创建一个对象,新对象的属性和原来的对象的属性完全相同,对于非基本类型属性,仍指向原有属性所指的对象的内存地址
- 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原来对象的地址。
深克隆实际就是把文件直接复制一份,浅克隆就是建立一个快捷方式,对象的clone是一种深克隆