Java设计模式3:原型模式

简介

概念: 用原型的实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,通俗的意思是复制一个一模一样的对象出来,其表现目的是保护最原始的那一份存档。隐藏复制过程。

实现

原型模式在java中实现要点是实现Cloneable接口,覆写Object的clone方法。

// Cloneable标记接口
public class Message implements Cloneable {
    int num;
    String descriotion;
    @Override
    public Message clone() {
        Message clone = null;
        try {
            // Object.clone()浅拷贝
            clone = (Message) super.clone();  
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

扩展

clone的实现其实很简单。以堆上的内存存储解释的话,调用对象a的clone拷贝方法,就是在堆上分配一个和a在堆上所占存储空间一样大的一块地方,然后把a的堆上内存的内容复制到这个新分配的内存空间上,所以该方法创建对象比直接new 一个对象性能好很多。
综上clone的行为直接产生一个问题,就是拷贝的对象和原型对象内的引用变量都会指向同一个依赖对象的内存块,这就可能造成我们在修改拷贝对象引用变量值时,可能同时会修改原型对象的内容(浅拷贝存在的问题),这完全是我们不想看到的问题,解决办法其实很简单,就是在拷贝原型对象后,同时拷贝原型对象内的引用对象(深拷贝)。

在Java中,创建一个堆上对象有五种方式:

  1. 使用new关键字 → 调用了构造函数
  2. 使用Class类的newInstance方法 → 调用了默认构造函数
  3. 使用Constructor类的newInstance方法 → 调用了构造函数
  4. 使用clone方法 → 没有调用构造函数
  5. 使用反序列化 → 没有调用构造函数

参考原地址:https://www.jianshu.com/p/c2bfba71bf10



、﹗∕
— 〇 -
╱︱ ヽ
但行好事、莫问前程!
>.freerme、我是lilee[https://blog.csdn.net/freerme]
_________________ *_*______
____ ____ ____
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值