原型模式:(可以实现Serializable或者Cloneable接口)
参考:https://www.runoob.com/design-pattern/prototype-pattern.html
https://www.cnblogs.com/xrq730/p/4905907.html
当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。下面是深拷贝的示例
使用原型模式创建对象比直接new一个对象在性能上好得多,因为Object类的clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。
public class Prototype implements Serializable{
@Override
public Prototype clone(){
try{
ByteArrayOutputStream bos=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputstream(bos);
oos.writeObject(this);
ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois=new ObjectInputStream(bis);
return (Prototype)ois.readObject();
}catch(Exception e){}
return null;}
}
public class PrototypeManager {
private HashMap<String,Prototype> cache=new HashMap<String,Prototype>();
public void addPrototype(String id,Prototype object){
this.cache.put(id,object);}
public Prototype getPrototype(String id){
Prototype tmp=this.cache.get(id);
return tmp.clone();}
}
使用:
PrototypeManager pm=new PrototypeManager();
pm.addPrototype("a",new Prototype());
Prototype a=pm.getPrototype("a");//这里返回了a对象的克隆(此处是深拷贝)
标签:return,Pattern,public,PrototypeManager,new,Prototype,id From: https://www.cnblogs.com/java-source-learn/p/17165618.html