设计模式7——Prototype设计模式

Prototype原型设计模式是指用原型实例指定建立对象的种类,而且经过拷贝这些原型来建立新的对象。Prototype原型模式容许一个对象再建立另一个可定制的对象,根本无需知道任何关于对象建立的细节。 java

原型模式的UML图以下: 设计模式


Prototype模式例子以下: this

//抽象原型类	
abstract class Shape implements Colneable{
    String shapeName;
    public String getShapeName(){
	retun shapeName;
    }

    public void setShapeName(String shapeName){
        this.shapeName = shapeName;	
    }

    //实现了Colneable接口的类,能够使用clone()方法复制对象
    public Object clone(){
	try{
	    return super.clone();
        }catch(CloneNotSupportedException e){
	    System.err.println(“此对象不支持复制”);
        }
        return null;
    }
}


//具体原型类
publc class Circle extends Shape{
    public Circle(){
	setShapeName(“Circle shape”);
    }

    public static void main(String[] args){
	Shape shape = new Circle();
	System.out.println(shape.getShapeName()); 
	//经过clone()方法得到一个对象拷贝
	Shape shape2 = (Shape)shape.clone();
	System.out.println(shape2.getShapeName());
    }
}


clone()方法是在Object中定义的,并且是protected的,只有实现了Cloneable接口的类才能够在其实例上调用clone()方法,不然会抛出CloneNotSupportException。 spa

为了获取对象的一份拷贝,咱们能够利用Object类的clone()方法,也能够实现Cloneable接口,覆盖基类的clone()方法,在clone()方法中,调用super.clone()。 .net

Cloneable接口是一个标记接口,也就是没有任何内容,定义以下:
package java.lang;
pubilc interface Cloneable{
}

更多有关java拷贝方面的内容请参考http://blog.csdn.net/chjttony/article/details/7477346 设计

克隆只是实现Prototype原型模式的一种方法,也能够直接经过new对象的方式建立原型实例,两者区别在于: code

(1).经过new方式建立的原型和现存的实例对象没有任何联系。 对象

(2).经过克隆方法建立的原型,虽然也是建立新对象,可是将原型实例对象的数据复制到了新的对象中,至关于使用被克隆对象的数据做为克隆对象的初始数据。 blog

Prototype原型设计模式和Singleton单类设计模式是相对的,单类模式中,在整个程序生命周期里,单类模式类的实例对象只有一个。而Prototype原型设计模式则正好相反,每次都返回的是原型类的不一样实例对象。 接口

JDK中原型模式的应用:

java.lang.Object#clone()

java.lang.Cloneable