美文网首页
Java23种设计模式之创建型模式「原型模式」

Java23种设计模式之创建型模式「原型模式」

作者: MrLimLee | 来源:发表于2020-07-23 16:37 被阅读0次

原型模式

Java23种设计模式之创建型模式「原型模式」
/**
 * 原型模式
 * <p>
 * 浅复制(浅克隆):将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的
 * 深复制(深克隆):不管是基本数据类型还是引用类型,都会重新创建。简单来说:就是深复制进行了完全彻底的复制
 * <p>
 * 注:
 * 实现 Cloneable 接口,并覆盖其clone方法,并且声明为 public
 * 浅复制和深复制建议不要混合使用,一个类中某些引用使用的浅复制,某些引用使用了深复制
 * 这是一种非常差的设计,特别是在涉及到类的继承,父类有几个引用的情况就非常复杂
 * 建议深复制和浅复制分开实现
 * <p>
 * 说明:
 * 这里在一个对象类里面写了两个复制逻辑,只是为了方便查看和学习
 *
 * @author Mr.Lim
 */
public class Prototype implements Cloneable, Serializable {
    private static final long serialVersionUID = -2911276289956526976L;

    /**
     * 姓名
     */
    public String name;

    /**
     * 年龄
     */
    public Integer age;

    /**
     * 学生信息对象
     */
    public Student student;

    /**
     * 浅复制
     */
    @Override
    public Prototype clone() {
        Prototype prototype = null;
        try {
            prototype = (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return prototype;
    }

    /**
     * 深复制
     * <p>
     * 注:
     * 本对象和对象里面引用的对象都要实现 java.io.Serializable 接口
     */
    public Prototype deepClone() {

        try {
            // 写入当前对象的二进制流
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream);
            oos.writeObject(this);

            // 读取当前对象的二进制流
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(byteArrayInputStream);
            return (Prototype) ois.readObject();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

}

相关文章

  • android常用设计模式

    26种设计模式 创建型设计模式[5] 单例模式,工厂模式,抽象工厂模式,建造模式,原型模式,[简单工厂模式] 结构...

  • 初始设计模式之原型模式

    原型模式是什么? 原型模式怎么用?浅拷贝深拷贝 原型模式再理解 一、原型模式是什么? ​ 原型模式是一种创建型设计...

  • S3. 原型模式

    原型模式(Prototype) baidu[www.baidu.com] 原型模式是一种创建型设计模式,其功能为复...

  • JavaScript设计模式

    设计模式分类(23种设计模式) 创建型单例模式原型模式工厂模式抽象工厂模式建造者模式 结构型适配器模式装饰器模式代...

  • Java设计模式之04_Prototype(原型模式)

    更多Java设计模式:Java设计模式-目录 原型模式是一种简单、易使用的创建型设计模式,通过给出一个原型对象来指...

  • 创建型设计模式

    1,创建型设计模式有四种:1,单例模式。2,工厂模式。3,建造者模式。4,原型模式。 2,四种设计模式的应用场景:...

  • prototype pattern原型模式

    定义 原型模式是一种非常简单的是模式,属于创建型设计模式的一种。原型模式(Prototype)即应用于“复制”操作...

  • 设计模式

    设计模式分为 3 大类型共 23 种:创建型:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型:...

  • 简单工厂模式

    Java23种设计模式--简单工厂模式 一、什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法...

  • 简单工厂模式

    创建型设计模式: 简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、原型模式和建造者模式。 统共六种。 本此分享...

网友评论

      本文标题:Java23种设计模式之创建型模式「原型模式」

      本文链接:https://www.haomeiwen.com/subject/qvuhlktx.html