首页 > 代码库 > 设计模式--------原型模式
设计模式--------原型模式
原型模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式的核心是一个clone方法,通过该方法进行对象的拷贝。
代码实例
public class Think implements Cloneable{ private String str; public Think(){ } @Override public Think clone(){ Think think = null; try{ think = (Think)super.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } } } public class Client{ public static void main(String args[]){ Think think = new Think(); Think cloneThink = think.clone(); } }
原型模式的优点:性能更加优良,逃避了构造函数的约束。
在原型模式中,克隆的对象不会执行构造函数。因为clone方法的原理是从内存中(具体地说就是堆内存)以二进制流的方式进行拷贝,重新分配一个内存块。
拷贝分为两种,浅拷贝和深拷贝。
代码实例
public class Think implements Cloneable{ private ArrayList<String> arrayList = new ArrayList(); public Think(){ } //浅拷贝 @Override public Think clone(){ Think think = null; try{ think = (Think)super.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } } //深拷贝 @Override public Think clone(){ Think think = null; try{ think = (Think)super.clone(); thing.arrayList = (ArrayList<String>)this.arrayList.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } } }
从实例中看到深拷贝与浅拷贝的区别在于是否拷贝ArrayList对象。
Java中clone方法只是拷贝对象,对于对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址,这种就是浅拷贝。这样就是两个对象共享了一个私有的变量。对于String类型,在clone中也会进行拷贝的,与基本数据类型一样。
而在覆写clone方法是把内部的引用对象和数组一起拷贝,这种叫深拷贝。
对于已被final修饰的对象,是不能被拷贝的。
说白了原型模式的作用就是使得创建对象时不需从零开始,直接在原有的对象的基础上做改动就可以。
设计模式--------原型模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。