转载请注明出处:http://blog.csdn.net/droyon/article/details/20709827
原型模式:用原型实例指定对象的种类,并且通过拷贝这些原型创建新的对象。
类图如下:
我们都知道通过如下代码不能创建新对象,他们都指向同一个对象。
案例代码:
Domesticrobots.java
/** * 家务机器人 * @author wanghl * */ public class Domesticrobots { private String mName; private String mVersion; public Domesticrobots(String name,String version){ mName = name; mVersion = version; } @Override public String toString() { return "Domesticrobots [mName=" + mName + ", mVersion=" + mVersion + "]"+super.toString(); } }
public class Main { public static void main(String args[]){ Domesticrobots robots1 = new Domesticrobots("家务机器人1", "终结者1代"); Domesticrobots robots2 = robots1; Domesticrobots robots3 = robots1; System.out.println(robots1); System.out.println(robots2); System.out.println(robots3); } }
Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@3ce53108 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@3ce53108 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@3ce53108
为了能够clone生产家务机器人,我们让家务机器人实现clone的接口。
ICloneRobots.java
public interface IRobotsClone<T> { public T clone(); }
/** * 家务机器人 * @author wanghl * */ public class Domesticrobots implements IRobotsClone<Domesticrobots>{ private String mName; private String mVersion; public Domesticrobots(String name,String version){ mName = name; mVersion = version; } @Override public String toString() { return "Domesticrobots [mName=" + mName + ", mVersion=" + mVersion + "]"+super.toString(); } public Domesticrobots clone(){ return new Domesticrobots(mName, mVersion); } }
Main.java
public class Main { public static void main(String args[]){ Domesticrobots robots1 = new Domesticrobots("家务机器人1", "终结者1代"); Domesticrobots robotsII = robots1.clone(); Domesticrobots robotsIII = robots1.clone(); System.out.println(robots1); System.out.println(robotsII); System.out.println(robotsIII); } }打印结果:
Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@6af62373 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@459189e1 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@55f33675我们看到,我们的robotsII以及robotsIII都是不同的对象。
原型模式可以让你从一个对象再创建另一个对象,并且新创建对象不需要知道创建的细节。
原文:http://blog.csdn.net/droyon/article/details/20709827