原型模式定义
原型模式就是根据一个原型对象来指明所有创建的对象的类型,然后根据这个原型对象复制出更多同类型的对象,这就是原型模式。
我们为什么要使用原型模式
示例
1 class Resume 2 { 3 private String name; 4 private String age; 5 private String company; 6 7 public Resume(String name,String age,String company) 8 { 9 this.name = name;10 this.age = age;11 this.company = company;12 }13 public void selfProduce()14 {15 System.out.println("我叫"+name+",年龄"+age+",曾经就职于"+company);16 }17 }18 19 public class Test20 {21 public static void main(String[] args)22 {23 Resume resume = new Resume("Tom", "23", "BAT");24 resume.selfProduce();25 Resume resume2 = new Resume("Tom", "23", "BAT");26 resume.selfProduce();27 Resume resume3 = new Resume("Tom", "23", "BAT");28 resume.selfProduce();29 } 30
如果我们现在要三份简历,我们就要创建三个对象;但是如果我们现在需要三十份简历,我们就要创建三十个对象,你觉得合适吗?现在理解为什么使用原型模式了吗?因为它可以根据一个对象复制出 n 个同类对象。
注意
原型模式要求被克隆的对象实现一个接口(Cloneable 接口),然后就可以通过这个被克隆的对象复制出一个新的对象。这样一来,无须再通过new去创建。
示例代码
1 class Resume implements Cloneable // 对象能够被克隆的前提是:被克隆的对象必须实现 Cloneable 接口,抽象类实现了该接口,子类对象也会跟着实现该接口 2 { 3 private String name; 4 private String age; 5 private String company; 6 7 public Resume(String name,String age,String company) 8 { 9 this.name = name;10 this.age = age;11 this.company = company;12 }13 public void selfProduce()14 {15 System.out.println("我叫"+name+",年龄"+age+",曾经就职于"+company);16 }17 18 public Resume clone()19 {20 Resume cloneObject = null;21 try22 {23 cloneObject = (Resume) super.clone(); // 按照惯例,返回的对象应该通过调用 super.clone 获得24 25 } catch (CloneNotSupportedException e)26 {27 e.printStackTrace();28 }29 return cloneObject;30 31 }32 }
客户端
1 public class Clone 2 { 3 @Test 4 public void test() 5 { 6 Resume resume = new Resume("Tom", 23, "男"); 7 Resume cloneResume = resume.clone(); // 这就是根据原对象克隆出来的新对象 8 cloneResume.selfProduce(); 9 }10 }
总结
以上就是原型模式;关于 Object 类的 clone() 方法,在下篇博客中将会有详细介绍。