首页 > 其他分享 >Prototype Pattern

Prototype Pattern

时间:2023-02-28 19:12:52浏览次数:35  
标签:return Pattern public PrototypeManager new Prototype id

原型模式:(可以实现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

相关文章