创建模式之—原型模式

我的版本:

 


 

原型模式:

     概念用原型指点创建对象的种类,并且通过拷贝这些原型创建新的对象

     目的:允许一个对象再创建另外一个可定制的对象,根本不需要知道任何如何创建的细节

      原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来
                   实施创建

     要求:实现cloneable

      图像:

    代码:
 
/**
  * Class
  *
  * @author ANDY
  *
  * 2012-9 -3 上午11:20:21
  *
  * 克隆接口继承 Cloneable接口
  */
public interface Prototype extends Cloneable {
       /**
       * Methods
       *
       * 吃东西的方法
       */
       public void eat();
 
       /**
       * Methods
       *
       * @return 本身
       * 克隆自己
       */
       public Prototype clone();
}
/**
 * Class
 *
 * @author ANDY
 *
 *         2012 -9- 3 上午11:25:27
 *
 *         人实现Prototype接口
 */
public class Person implements Prototype {
       /**
       * 人的名称
       */
       private String name ;
 
       /**
       * Methods
       *
       * @return
       * 得到名字
       */
       public String getName() {
             return name ;
      }
 
       /**
       * Methods
       *
       * @param name
       *            设置名字
       */
       public void setName(String name) {
             this.name = name;
      }
 
       /*
       * (non- Javadoc)
       *
       * @see prototype_原型模式.Prototype#eat()
       *
       * 吃东西实现方法
       */
       @Override
       public void eat() {
            System. out.println("吃东西" );
      }
 
       /*
       * (non- Javadoc)
       *
       * @see java.lang.Object#clone()
       *
       * 克隆自己实现方法
       */
       @Override
       public Prototype clone() {
             try {
                   return (Prototype) super.clone();
            } catch (CloneNotSupportedException e) {
                   return null ;
            }
      }
 
}
/**
 * Class
 *
 * @author ANDY
 *
 *         2012 -9- 3 上午11:26:59
 *
 *         客户类可以直接克隆Person
 */
public class Client {
 
       /**
       * Methods
       *
       * @param pe
       * @return
       * 克隆的方法
       */
       public Prototype clone(Prototype pe) {
             return pe.clone();
      }
 
       /**
       * Methods
       *
       * @param args
       * 测试方法
       */
       public static void main(String[] args) {
            Client client = new Client();
            Person p0 = new Person();
            p0.setName( "andy");
            Person p1 = (Person)client.clone(p0);
            Person p2 = (Person)client.clone(p0);
            System. out.println(p1.getName());
            System. out.println(p2.getName());
            p1.eat();
            System. out.println(p1==p2);
            System. out.println(p0==p2);
      }
}
 

 
网络版本之一:

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

Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

如何使用?
因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单.

以勺子为例:

public abstract class AbstractSpoon implements Cloneable
{
  String spoonName;

  public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
  public String getSpoonName() {return this.spoonName;}

  public Object clone()
  {
    Object object = null;
    try {
      object = super.clone();
    } catch (CloneNotSupportedException exception) {
      System.err.println("AbstractSpoon is not Cloneable");
    }
    return object;
  }
}


有个具体实现(ConcretePrototype):

public class SoupSpoon extends AbstractSpoon
{
  public SoupSpoon()
  {
    setSpoonName("Soup Spoon");
  }
}


 


调用Prototype模式很简单:

AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon2 = spoon.clone();

当然也可以结合工厂模式来创建AbstractSpoon实例。

在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多模式上,如Interator遍历模式。

posted on 2012-11-25 11:41  YangJin  阅读(177)  评论(0编辑  收藏  举报