zoukankan      html  css  js  c++  java
  • 设计模式之GOF23原型模式02

    利用序列化和反序列化完成深复制

    ByteArrayOutputStream bos=new ByteArrayOutputStream();
      ObjectOutputStream oos=new ObjectOutputStream(bos);
      oos.writeObject(s1);
      byte[] bytes=bos.toByteArray();
      ByteArrayInputStream bis=new ByteArrayInputStream(bytes);
      ObjectInputStream ois=new ObjectInputStream(bis);
      Sheep3 s3=(Sheep3) ois.readObject();

    原型模式的与工厂模式相结合

    工厂模式new出来的对象可以变为Clone出来的

    new方式和Clone方式创建1000个对象的比较(配置低版本)

    public class Test {
     public static void testNew(int size) {
      long start =System.currentTimeMillis();
      for(int i=0;i<size;i++) {
       Iphone iphone=new Iphone();
      }
      long end =System.currentTimeMillis();
      System.out.println("new耗时"+(end-start));
     }
     public static void testClone(int size) throws CloneNotSupportedException {
      long start =System.currentTimeMillis();
      Iphone iphone=new Iphone();
      for(int i=0;i<size;i++) {
       Iphone iphonex=(Iphone) iphone.clone();
      }
      long end =System.currentTimeMillis();
      System.out.println("clone耗时"+(end-start));
     }
      public static void main(String[] args) throws CloneNotSupportedException {
       testNew(1000);
       testClone(1000);
      }
    }
    class Iphone implements Cloneable{
     public Iphone() {
      try {
       Thread.sleep(10);//模拟new的耗时
      } catch (InterruptedException e) {
       e.printStackTrace();
      }
     }
     @Override
     protected Object clone() throws CloneNotSupportedException {
      return super.clone();
     }
    }

    输出结果:new耗时16674
                       clone耗时20

  • 相关阅读:
    terminal下历史命令自动完成功能history auto complete
    Shell中while循环的done 后接一个重定向<
    python 链接hive
    shell 学习基地
    c++ 获取本地ip地址
    c++ 如何实现,readonly
    c++ 语法
    c++ 信号量
    vim插件介绍
    c++ memset 函数 及 坑
  • 原文地址:https://www.cnblogs.com/code-fun/p/11329920.html
Copyright © 2011-2022 走看看