手机网站开发用什么语言,镇江网站排名公司,网站开发数据库有关合同,怎么接广告赚钱概述 用一个已经创建的实例作为原型#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象 结构
抽象原型类#xff1a;规定了具体原型对象必须实现的clone()方法具体原型类#xff1a;实现抽象原型类的clone()方法#xff0c;它是可以被复制的对象。访问类通过复制该原型对象来创建一个和原型对象相同的新对象 结构
抽象原型类规定了具体原型对象必须实现的clone()方法具体原型类实现抽象原型类的clone()方法它是可以被复制的对象。访问类使用原型类中的clone()方法来复制新的对象
分类
浅克隆也就是浅拷贝创建一个新的对象新对象的属性和原来对象完全相同对于非基本类型属性仍指向原油属性所指向的内存地址。原型模式深克隆也就是深拷贝创建一个新对象属性引用的其他对象也会被克隆不再指向原有对象地址。 扩展
Java中的Object类中提供了clone()方法来实现浅克隆。Cloneable是实现浅克隆的接口
使用场景
对象的创建非常复杂可以使用原型模式快捷的创建对象。性能的安全要求比较高。
深克隆
需要用序列化和反序列化来操作
import java.util.ArrayList;class Person implements Cloneable {private String name;private ArrayListString hobbies;public Person(String name) {this.name name;this.hobbies new ArrayList();}public void addHobby(String hobby) {this.hobbies.add(hobby);}public String getName() {return this.name;}// 新增深复制getHobbies方法public ArrayListString getDeepCopyOfHobbies() {return new ArrayList(this.hobbies);}// 重写clone方法以实现深复制Overrideprotected Object clone() throws CloneNotSupportedException {Person clonedPerson (Person) super.clone();// 对引用类型的hobbies进行深复制clonedPerson.hobbies new ArrayList(this.hobbies);return clonedPerson;}public static void main(String[] args) throws CloneNotSupportedException {Person person1 new Person(Alice);person1.addHobby(Reading);// 使用clone方法创建深复制对象Person person2 (Person) person1.clone();person2.getName(); // 输出Aliceperson2.getHobbies().add(Swimming); // 修改person2的爱好// 由于进行了深复制所以person1和person2的hobbies引用不同的对象System.out.println(person1.getHobbies()); // 输出[Reading]System.out.println(person2.getHobbies()); // 输出[Reading, Swimming]}
}
以上代码展示了Java中实现原型模式的基本结构。通过clone()方法我们可以创建一个与原始对象具有相同状态的新对象这在某些场景下可以显著提高对象创建的效率尤其是当初始化成本较高的时候。注意这里的clone()方法使用了序列化的方式来实现深复制确保复制出的对象与原对象内容相同但内存空间独立。