原型模式

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


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


使用原型模式创建对象比直接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),然后通过流的形式,写出,然后直接写入。获得一个新的对象,就是深克隆。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值