當Singleton模式類實現Serializable

package com.yinbodotcc;

import java.io.*;
public class CopyDog
{ // Not to be confused with copycat
 public static void main(String[] args)
 {
  Dog newDog = (Dog) deepCopy(Dog.INSTANCE);
  System.out.println(newDog == Dog.INSTANCE);
  System.out.println(newDog);
 }
// This method is very slow and generally a bad idea!
 static public Object deepCopy(Object obj)
 {
  try
  {
   ByteArrayOutputStream bos =new ByteArrayOutputStream();
   new ObjectOutputStream(bos).writeObject(obj);
   ByteArrayInputStream bin =new ByteArrayInputStream(bos.toByteArray());
   return new ObjectInputStream(bin).readObject();
  }
  catch(Exception e)
  {
   throw new IllegalArgumentException(e);
  }
 }
}

 class Dog implements Serializable
 {
 public static final Dog INSTANCE = new Dog();
 private Dog() {}
 public String toString()
 {
  return "Woof";
 }

//如果沒有下面的這個部分,則會打印爲false,說明真的不是Singleton
 private Object readResolve()
 {

  return INSTANCE;
 }
 

發佈了109 篇原創文章 · 獲贊 0 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章