原型模式

来源:互联网 发布:换手率软件下载 编辑:程序博客网 时间:2024/05/29 08:29

通过一个原型对象,指明所有创建的对象的类型。之后复制这个原型对象,创建出更多类型的对象。


我们要生成的对象,必须实现可以‘克隆’自己的接口。复制实例对象,来创建一个新的实例。只要实现克隆自身的方法,就可以获得新对象。


使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。所以在需要重复地创建相似对象时可以考虑使用原型模式。比如需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多。

 原型模式类似于工厂模式,但它没有了工厂模式中的抽象工厂和具体工厂的层级关系,代码结构更清晰和简单。



1.简单形式

客户:提出,我需要一个对象。

抽象原型角色:一个接口

具体原型角色:被复制的对象。

public interface Prototype{      //克隆自己。      public Object clone();}

public class ConcretePrototype1 implement Prototype{     public Prototype clone(){           Prototype prototype = new  ConcretePrototype();           return prototype ;   }}

客户端在使用过的时候:

        Prototype prototype1 = new ConcretePrototype1();        ConcretePrototype1 concretePrototype1 = (ConcretePrototype1) prototype1.clone();        Prototype prototype2 = new ConcretePrototype2();        ConcretePrototype2 concretePrototype2 = (ConcretePrototype2) prototype2.clone();
这是一种new的形式。也可以调用java的Object的clone方法。


abstract class Prototype implements Cloneable{      public Object clone(){           return super.clone();      }}
public class ConcretePrototype1 extends Prototype{    /**     * 克隆自身方法     * @return     * @throws CloneNotSupportedException      */    public Object clone() throws CloneNotSupportedException{        return (ConcretePrototype1) super.clone();    }}
这种是直接调浅克隆的方法。

浅克隆和深克隆:如果对象只有基本类型,深浅都一样。如果有对象属性,那么浅克隆是拷贝一份引用。而深克隆是把整个引用对象都拷贝过去。

一般深克隆都是通过序列化对象(Serializable),然后通过流的形式,写出,然后直接写入。获得一个新的对象,就是深克隆。






0 0
原创粉丝点击