设计模式7—Prototype设计模式

来源:互联网 发布:阿里云 centos7 mysql 编辑:程序博客网 时间:2024/06/05 21:17

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

原型模式的UML图如下:

Prototype模式例子如下:

//抽象原型类

abstract class Shape implements Colneable{

      String shapeName;

      public String getShapeName(){

           return shapeName;

      }

     public void setShapeName(String shapeName){

             this.shapeName = shapeName;

      }

  //实现了Colneable接口的类,可以使用clone()方法复制对象

  public Object clone(){

       try{

              return super.clone();

       }catch(CloneNotSupportedException e){

             System.out.println("此对象不支持复制”);

       }

       return null;

  }

}

//具体原型类

public 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。

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

Cloneable接口是一个标记接口,也就是没有任何内容,定义如下:

package java.lang;

public interface Cloneable{

}

克隆只是实现Prototype原型模式的一种方法,也可以直接通过new对象的方式创建原型实例,二者区别在于:

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

(2)通过克隆方法创建的原型,虽然也是创建新对象,但是将原型实例对象的数据复制到了新的对象中,相当于使用被克隆对象的数据作为克隆对象的初始数据。

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

JDK中原型模式的应用:

java.lang.Ojbect#clone()

java.lang.Cloneable

0 0
原创粉丝点击