業余時間寫了有關對象池方面的程序,不足之處請大家指出:
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 Integer
.toString());
* testObject.setName("01" + new Integer
.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類提供了獲取對象的相關方法,程序還有不少要改進的地方,貼出來讓大家提出改進的意見!
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 Integer

* testObject.setName("01" + new Integer

*/
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類提供了獲取對象的相關方法,程序還有不少要改進的地方,貼出來讓大家提出改進的意見!