06原型模式

来源:互联网 发布:mac 磁盘图标 名称 编辑:程序博客网 时间:2024/06/07 07:19

原型模式    -- 如何快速且精准地复制一个对象  (注意!复制出来的对象不是同一个)

<设计模式其实很简单>笔记


①定义:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象


②代码:

//抽象原型类public abstract class Prototype{private String id;//构造函数public Prototype(String id){this.id = id;}//id变量的get方法public String getId(){return id;}//抽象的Clone方法public abstract Prototype Clone();}//具体原型类public class ConcretePrototype1 extends Prototype{public ConcretePrototype1(String id){super(id);}//覆盖父类抽象方法@Overridepublic Prototype Clone(){try{return (Prototype)this.clone();                   //clone 方法不知道怎么来的..}catch(CloneNotSupportedException e){return null;}}}//客户端代码public static void main(String[] args){ConcretePrototype1 p1 = new ConcretePrototype1("1");ConcretePrototype1 p2 = (ConcretePrototype1)p1.Clone();try{System.out.println("拷贝的:" + p2.getId());}catch(NullPointerException e){ }}//Java 提供了 Cloneable 接口,实现后就能使用原型模式了    clone( );//原型模式不是线程安全的


③Java 深复制 浅复制
--浅复制
对于值类型的字段会进行逐位复制,对于引用类型的字段,则复制引用但不复制引用的对象。
--深复制
对于引用类型的对象的复制是将引用的变量指向一个新对象,而不是被引用的对象。
java 深复制数组
int[] a = new int[]{ 1,2,3,4 };
int[] b = new int[4];
System.arraycopy(a,0,b,0,4) 
④适用情况:
--当要实例化的类是在运行时刻制定时。
--为了避免创建一个与产品类层次平行的工厂类层次时
--当一个类的实例只能有几个不同状态组合中的一种时。
⑤优点:
原型模式在实例化一个对象时隐藏了对象创建的具体细节。(通过已存在的对象copy一个),而且不用调用构造方法,提高运行的效率。
还有就是保存了原有对象的数据(值类型的数据,若是想让引用类型的属性也复制一份,则需要让这个引用类型的类也使用原型模式。再手动的将变量指向这个新的对象)
0 0
原创粉丝点击