栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java设计模式:原型模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java设计模式:原型模式

Java设计模式:原型模式 概述

用一个已经创建的实例作为原型,通过复制该原型来创建一个和原型对象相同的新对象,克隆对象就需要注意浅拷贝和深拷贝的问题

深浅克隆问题 浅克隆
public class Teacher implements Cloneable{
    public Student student;

    public Teacher(Student student) {
        System.out.println("构造");
        this.student = student;
    }
    
    public static void main(String[] args) throws CloneNotSupportedException {
        Teacher teacher = new Teacher(new Student("stu"));
        Teacher newTeacher = (Teacher) teacher.clone();
        System.out.println(newTeacher.student == teacher.student);
        System.out.println("修改前" + newTeacher.student.name+"t" + teacher.student.name);
        teacher.student.name = "change";
        System.out.println("修改后" + newTeacher.student.name+"t" + teacher.student.name);
    }
}
class Student{
    public String name;
    public Student(String name) {
        this.name = name;
    }
}

这里==号判断的就是两个Student成员的地址信息,这里可见两个Student对象指向了同一个地址,如果修改一个对象的name,那么另一个对象的name也会跟着变

深克隆

当Teacher类实现Cloneable接口时,重写clone时可以实现深拷贝,但违背了原型模式初衷,因为还是进行了对象的创建,这里可以使用序列化再反序列化达到深克隆的效果

序列化之后立即反序列化,这时候就是深拷贝了,两个对象内部的对象地址也不相同

总结

原型模式就是在对象创建比较复杂,而需要的新对象刚好和旧对象差别不大,可以直接使用克隆来达到效果,它不会走构造方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877619.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号