原型模式
今天我们要学习的第一种设计模式是原型模式。
比如,我们需要三份同样的简历,简历里面包含姓名,性别,工作经历,我们可能会实例化三个简历对象。但是如果我们需要100份简历呢?我们是不是还得实例化100个简历对象呢?这样做好像有点麻烦。
那么就引入原型模式的概念了,原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
而在java中,一个对象如果想要被克隆,需要实现Clonable接口,并复写clone()方法。
要被克隆的对象类:
1 package prototype; 2 3 public class ConcretePrototype implements Cloneable{ 4 5 private int a; 6 7 public ConcretePrototype(int a) { 8 this.a = a; 9 } 10 11 public String toString(){ 12 return Integer.toString(a); 13 } 14 15 public ConcretePrototype clone(){ 16 ConcretePrototype o = null; 17 try { 18 o = (ConcretePrototype)super.clone(); 19 } catch (CloneNotSupportedException e) { 20 e.printStackTrace(); 21 } 22 return o; 23 } 24 25 public int getA() { 26 return a; 27 } 28 29 public void setA(int a) { 30 this.a = a; 31 } 32 }
客户端调用:
1 public class MainClass { 2 public static void main(String[] args) { 3 ConcretePrototype cp = new ConcretePrototype(1); 4 5 ConcretePrototype cp1 = cp.clone(); 6 cp1.setA(2); 7 System.out.println(cp1); 8 9 ConcretePrototype cp2 = cp.clone(); 10 cp2.setA(3); 11 System.out.println(cp2); 12 13 System.out.println(cp); 14 } 15 }
这样做似乎没有什么问题,但是我们要注意到这样做其实只做到了浅表赋值,关于浅表赋值和深复制可查看另一篇博客http://www.cnblogs.com/justprograme/archive/2012/10/25/2738451.html
如果被克隆的对象中含有不是基本类型的对象,那么我们需要对他们实现克隆。
每天都要对自己清零,每天都要进步,哪怕只有一点点