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

  • 相关阅读:
    Android的计量单位px,in,mm,pt,dp,dip,sp
    android实现图片平铺效果&WebView多点触控实现缩放
    360°全景图
    为Vell001家族使用过的图标
    WordPress更新服务加快收录
    WordPress模版结构
    android权限大全
    Android强制设置横屏或竖屏
    android获取屏幕分辨率
    android用ImageView显示网络图片
  • 原文地址:https://www.cnblogs.com/code-fun/p/11329920.html
Copyright © 2011-2022 走看看