设计模式之原型模式总结

术语快速解释

其实原型模式说白了就是克隆,用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。

为什么能保证性能?

是因为,原型模式是在内存中的二进制流的拷贝要比直接new好,特别是要在一个很大的循环体中产生大量对象的时候,你觉得是直接复制好,还是执行一次循环再获取一次要来的快?答案显而易见。但是它也有一个显著的缺点,那就是既然是直接在内存中拷贝,那么就根本不会执行构造函数,因为构造函数是用来初始化类的,而你是直接拷贝。所以需要注意这点


原型模式使用方式

克隆有两种方式浅克隆,和深克隆,当然这里介绍原型模式用到简单的深克隆。具体两者区别及高级用法用法请移步,不是这里介绍的重点

实现步骤:

  1. 被复制的类需要实现Clonenable接口, 该接口为标记接口(不含任何方法)
  2. 覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象。
  3. 将得到的复制对象返回,如果对象中有引用对象那么对引用对象再克隆一次。
class Student implements Cloneable{  
    private int number;  
    private ArrayList<String> image = new ArrayList<String>();
    public int getNumber() {  
        return number;  
    }  
   public int getImage() {  
        return image;  
    } 
    public void setNumber(int number) {  
        this.number = number;  
    }  
       public void setImage(String url) {  
        this.image.add(url);  
    } 
    @Override  
    public Object clone() {  
        Student stu = null;  
        try{  
            stu = (Student)super.clone();  
            stu.number=this.number;
            //引用对象再次克隆
            stu.image=this.image.clone();
        }catch(CloneNotSupportedException e) {  
            e.printStackTrace();  
        }  
        return stu;  
    }  
}  
原型模式有两种用途

第一种:
当直接创建对象的代价比较大时(比如要进行网络操作获取、数据库操作之类的消耗资源时间的操作),则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
第二种:
这也是一个比较重要的用途,那就是保护性用途,也就是某个对象对外只可读,为了防止这个只读对象被修改,通常可以通过返回给一个对象的拷贝的形式实现可读。
拿我们生活中的例子来说就是,你有一份重要的文件,想给别人看,但是那个人你不知道他会不会对你文件动手脚,改文字之类的,或者撕掉你的文件。这个时候你就可以去打印店复制一份给他,这样他改了也不影响你原文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值