憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
          業余時間寫了有關對象池方面的程序,不足之處請大家指出:
          1)要放如到對象池中的對象類
          package com.test;

          import java.util.*;

          public class TestObject {
            private String ID;
            
            private String name;
            
            private boolean isUsed = false;
            
            private long firstDate = System.currentTimeMillis();
            
            public void handle() {// 業務操作 ?????
            }
            
            public long getFirstDate() {
              return firstDate;
            }
            
            public void setFirstDate(long firstDate) {
              this.firstDate = firstDate;
            }
            
            public boolean isUsed() {
              return isUsed;
            }
            
            public void setUsed(boolean isUsed) {
              this.isUsed = isUsed;
            }
            
            public String getName() {
              return name;
            }
            
            public void setName(String name) {
              this.name = name;
            }
            
            public String getID() {
              return ID;
            }
            
            public void setID(String id) {
              ID = id;
            }
            
            public boolean close() {
             this.setFirstDate(System.currentTimeMillis());
              this.setUsed(false);
              return true;
            }
          }
          2)對象池類
          package com.test;

          import java.util.*;

          ;

          public class Factory {
            private static Factory factory;
            
            private static int minimum = 4;// 對象池中最少有4個對象
            //暫時沒有寫對象池初始化的時候自動生成4個相關對象
            private static int maximum = 10;// 對象池中最多有10個對象
            
            private static Collection data = new Vector();
            static {
              TestObject testObject = new TestObject();
              /*
          * for (int i = 0; i < minimum; i++) { testObject.setID("0" + new IntegerLight Bulb.toString());
          * testObject.setName("01" + new IntegerLight Bulb.toString()); data.add(testObject); }
          */
              testObject.setID("01");
              testObject.setName("011");
              data.add(testObject);
              testObject = new TestObject();
              testObject.setID("02");
              testObject.setName("021");
              data.add(testObject);
              testObject = new TestObject();
              testObject.setID("03");
              testObject.setName("031");
              data.add(testObject);
              testObject = new TestObject();
              testObject.setID("04");
              testObject.setName("041");
              data.add(testObject);
              testObject = new TestObject();
              testObject.setID("05");
              testObject.setName("051");
              data.add(testObject);
              testObject = new TestObject();
              testObject.setID("06");
              testObject.setName("061");
              data.add(testObject);
              testObject = new TestObject();
              testObject.setID("07");
              testObject.setName("071");
              data.add(testObject);
            }
            
            private Factory() {
              
            }
            
            public static synchronized Factory creatFactoryPool() {
              if (factory == null)
                factory = new Factory();
              return factory;
            }
            
            public TestObject getObject(String id) {
              /*
          * 通過ID來查找對象
          */
              Iterator iterator = getIterator();
              TestObject object = null;
              int i = 0;
              while (iterator.hasNext()) {
                object = (TestObject) iterator.next();
                if (id.equals(object.getID())) {
                  i = 1;
                  /*
          * 當返回池中對象時,對象的下面2個屬性值做相映的變化
          */
                  object.setFirstDate(System.currentTimeMillis());
                  object.setUsed(true);
                  break;
                }
              }
              if (i == 1) {
                return object;
              } else {
                System.out.println("ID=" + id + "對象不存在!");
                return null;
              }
            }
            
            public TestObject getObject() {
              /*
          * 獲取池中對象,如池中沒有多余對象可供選擇,即返回一新建對象.
          * 如池中對象數目沒有達到最大值,就把此對象添加池中.
          */
              Iterator iterator = getIterator();
              TestObject object = null;
              int i = 0;
              while (iterator.hasNext()) {
                object = (TestObject) iterator.next();
                if (object.isUsed() == false) {
                  i = 1;
                  object.setFirstDate(System.currentTimeMillis());
                  object.setUsed(true);
                  break;
                }
              }
              if (i == 1) {// 得到要查找的對象
                return object;
              }
              if (data.size() < maximum) {
                System.out.println("返回新建對象,添加池中!");
                object = new TestObject();
                object.setUsed(true);
                data.add(object);
                return object;
              } else {
                System.out.println("返回新建對象!");
                return new TestObject();
              }
            }
            
            public boolean deleteObject(String id) {
              /*
          * 根據對象ID來刪除對象.成功返回true,失敗返回false
          */
              Iterator iterator = getIterator();
              TestObject object = null;
              int i = 0;
              while (iterator.hasNext()) {
                if (object.getID().equals(id)) {
                  iterator.remove();
                  i = 1;
                  break;
                }
              }
              if (i == 0) {
                System.out.println("ID=" + id + "被刪除對象不存在!");
                return false;
              } else {
                System.out.println("刪除對象成功!");
                return true;
              }
              
            }
            
            public boolean addObject(TestObject Object) {
              return data.add(Object);
              
            }
            
            public void objectManage() {
              /*
               * 池對象在獲取對象時候,都會執行此方法.如果有對象超過30分鐘沒有使用,
               * 就把此對象isUsed屬性值改成false
               */
              long interval = 30 * 60 * 1000;// 30分鐘
              Iterator iterator = data.iterator();
              TestObject object = null;
              long currentTime = System.currentTimeMillis();
              while (iterator.hasNext()) {
                object = (TestObject) iterator.next();
                if (object.isUsed() == false)
                  continue;
                if (currentTime - object.getFirstDate() >= interval) {
                  object.setUsed(false);
                }
              }
            }
            
            public Collection getData() {
              return data;
            }
            
            public Iterator getIterator() {
              objectManage();
              return data.iterator();
            }
            
          }
          Factory類提供了獲取對象的相關方法,程序還有不少要改進的地方,貼出來讓大家提出改進的意見!
          posted on 2007-05-10 23:03 二胡 閱讀(133) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 潞城市| 乌兰察布市| 福贡县| 舞钢市| 鹤岗市| 安岳县| 石狮市| 清水县| 静海县| 扎赉特旗| 大田县| 濉溪县| 商洛市| 崇文区| 临猗县| 天镇县| 五原县| 同心县| 雅安市| 江山市| 乌什县| 扶风县| 沅陵县| 本溪市| 丰顺县| 兰西县| 沙田区| 诸城市| 永川市| 大庆市| 璧山县| 收藏| 静安区| 贵定县| 彰化市| 康保县| 缙云县| 哈尔滨市| 资源县| 娄底市| 越西县|