原型模式(创建型)
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
JAVA应用:
java.util.ArrayList
java.util.HashMap
public class Pig implements Cloneable{ private String name; private Date birthday; public Pig(String name, Date birthday) { this.name = name; this.birthday = birthday; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override protected Object clone() throws CloneNotSupportedException { Pig pig = (Pig)super.clone(); //深克隆 pig.birthday = (Date) pig.birthday.clone(); return pig; } @Override public String toString() { return "Pig{" + "name='" + name + '\'' + ", birthday=" + birthday + '}'+super.toString(); } }
public class Test { public static void main(String[] args) throws CloneNotSupportedException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { Date birthday = new Date(0L); Pig pig1 = new Pig("佩奇",birthday); Pig pig2 = (Pig) pig1.clone(); System.out.println(pig1); System.out.println(pig2); pig1.getBirthday().setTime(666666666666L); System.out.println(pig1); System.out.println(pig2); } }