//Java简单的对象工厂
/*
* Main.java
*
* Created on 2007年9月24日, 上午00:40
* @author ouskylin
*
**/
import java.util.Date;//using the Date Class to testing
/**
* Factory Class explain
* 一个产生对象的工厂,用来生成任意类型的对象
* 使用一个对象的实例来初始化一个特定的工厂
* GetMeObject将以这个对象的实例做为
* 一个特定的模板获得的该类型的"新"对象
*
*
*/
///*
class Factory {
private int _count;//对象产生计数器
private Object _ob;//对象工厂的类型,也就是产生对象的类型
private String _factoryName; //Factory Name is output object'name
public Factory (Object ob){
_ob=ob;
_factoryName=ob.getClass ().toString ();
}
/**
* GetMeObject返回这个对象工厂类型的新对象
* @return Object
*/
public Object GetMeObject (){
/* Mode one
//
Object o=new Object();
o=_ob;
++_count;
return o;
//*/
//* Mode two;
++_count;
//【技术点】
//看似返回的都是初始化时的_ob对象,实则在这个新引用对象内部有所改变的时候
//会被分配新的堆空间(构建一个全新的对象),这得感谢于Java内置的对象内存
//管理机制
return _ob;
//*/
}
public void ChengeFactoryObject (Object o){
_factoryName=o.getClass ().toString ();
_ob=o;
_count=0;
}
public String GetFactoryName (){
return _factoryName;
}
public int GetFactoryObjectCount (){
return _count;
}
}
//没有任何功能的作测试用的类
class TestClassABC{
public String toString(){
return "This is a TestClassABC' s Object";
}
}
//*/
public class Main {
/** Creates a new instance of Main */
public Main () {
}
/**
* @param args the command line arguments
*/
public static void main (String[] args) {
System.out.println ("Access");
Factory f=new Factory (new TestClassABC ());//工厂f
Factory f2=new Factory(new String("Testing"));//工厂f2
Object a=f.GetMeObject ();
Object b=f.GetMeObject ();
//*Test Block
//b="aa";
a="bb";
System.out.println (a+" "+b);
if(a==b)
System.out.print ("a == b/n");
else
System.out.print ("a != b/n");
if(a.equals(b))
System.out.print ("a equals b/n");
else
System.out.print ("a not equals b/n");
if(a.getClass ().equals (b.getClass ()))
System.out.print ("a class name equals b/n");
else
System.out.print ("a class name not equals b/n");
//*/
System.out.println ("这个对象工厂能够产生的对象名称: "+f.GetFactoryName ());
System.out.println ("至今为止工厂产生的对象"+f.GetFactoryName ()+"数是:"+f.GetFactoryObjectCount ());
//System.out.println(a);
System.out.println ("这个对象工厂能够产生的对象名称: "+f2.GetFactoryName ());
System.out.println ("至今为止工厂产生的对象"+f2.GetFactoryName ()+"数是:"+f2.GetFactoryObjectCount ());
f.ChengeFactoryObject (new Integer (0));
Object t1=f.GetMeObject ();
Object t2=f.GetMeObject ();
System.out.println ("这个对象工厂能够产生的对象名称: "+f.GetFactoryName ());
System.out.println ("至今为止工厂产生的对象"+f.GetFactoryName ()+"数是:"+f.GetFactoryObjectCount ());
//t1=100;
//System.out.println (t1);
//System.out.println (t2);
f.ChengeFactoryObject(new Date());
Date d1=(Date)f.GetMeObject();
Date d2=(Date)f.GetMeObject();
}
}