java 的原型模式和clone

简介: 原型模式是一种创建型设计模式,在java中可以直接调用object.clone()。     原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。

 原型模式是一种创建型设计模式,在java中可以直接调用object.clone()。

    原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是选型模式的用意。

    而java中 所有的对象都是 object,在object中 就有了clone() 方法,因此大多数时候大家都不怎么关注,它一般可以与工厂模式一起使用。

    对于clone来说,java中有深克隆 和浅克隆,原文称为: Shallow Clone&Deep Clone,区别在于:

     Object在对某个对象实施Clone时对其是一无所知的,它仅仅是简单地执行域对域的copy,这就是浅克隆Shallow Clone,

     当Object 里面有一个域hireDay不是基本型别的变量,而是一个reference变量,经过Clone之后就会产生一个新的Date型别的reference,它和原始对象中对应的域指向同一个Date对象,这样克隆类就和原始类共享了一部分信息,而这样显然是不利的,这时候就需要深克隆 deep Clone。

 

    使用深克隆 可以使用对象流复制的方式:

   

一般使用的clone()方法虽然可以实现深度克隆,
但是需要的克隆对象里有其他引用对象,这个引用对象还有引用对象
那么你重写clone()方法就非常的繁琐了
所以建议使用输入输出流进行克隆

/*
     * 复制对象obj,类似于值传递,非引用
     */
    public static Object cloneObject(Object obj) throws Exception{
           ByteArrayOutputStream  byteOut = new ByteArrayOutputStream();  
           ObjectOutputStream out = new ObjectOutputStream(byteOut);  
           out.writeObject(obj);         
           ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());  
           ObjectInputStream in =new ObjectInputStream(byteIn);        
           return in.readObject();
    }

 

  需要注意的是:对象要实现序列化的接口 :Serializable

  

目录
相关文章
|
4月前
|
设计模式 Java
Java设计模式【五】:原型模式
Java设计模式【五】:原型模式
17 0
|
6月前
|
设计模式 存储 Java
JAVA设计模式4:谈谈原型模式在JAVA实战开发中的应用
JAVA设计模式4:谈谈原型模式在JAVA实战开发中的应用
|
3月前
|
设计模式 存储 JSON
Java设计模式-原型模式
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的`Object clone()`就是原型模式的应用。
30 1
Java设计模式-原型模式
|
8月前
|
设计模式 Java
创造与复制:揭秘Java设计模式中的原型模式
在软件开发领域,设计模式是解决常见问题的经验总结,提供了一些被验证过的指导原则。原型模式是创建型设计模式之一,它允许我们通过复制现有对象来创建新对象。在本文中,我们将探索原型模式的本质,以及它在Java中的实际应用。
35 0
|
4月前
|
Java
Java 对象clone
Java 对象clone
|
4月前
|
存储 缓存 Rust
原型模式 rust和java的实现
原型模式 rust和java的实现
23 0
|
6月前
|
设计模式 搜索推荐 Java
【设计模式——学习笔记】23种设计模式——原型模式Prototype(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——原型模式Prototype(原理讲解+应用场景介绍+案例介绍+Java代码实现)
34 0
|
7月前
|
Java
Java 原型模式讲解和代码示例
Java 原型模式讲解和代码示例
49 0
|
8月前
|
设计模式 Java
|
8月前
|
设计模式 缓存 安全
原型模式【Java设计模式】
原型模式【Java设计模式】
40 0