Java对象生成器

来源:互联网 发布:msvcr110.dll软件 编辑:程序博客网 时间:2024/04/28 19:37

//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();
      
             
    }
   
}

原创粉丝点击