原文出处:http://www.bubuko.com/infodetail-1142769.html
题目:效仿示例Lunch.java的形式,创建一个名为ConnectionMannager的类,该类管理一个元素为Connection对象的固定数组。客户端程序员不能直接创建connection对象,而只能通过ConnectionMananger中的某个static方法来获取它们。当ConnectionManager之中不再有对象时,它会返回null引用。在main中检测这些类。
解析:ConnectionMannager对象其实相当于一个connection的池,如果完善一下这个例子,增加把connection放回池的方法的话,那这个类就可以看做是一个简单的静态池。池子中静态方法返回connection对象的时候用到了简单工厂方法。
Connection对象如下:
package ConnectionDemo;
public class Connection {
String str="";
protected Connection(String str) {
this.str=str;
}
public void describ(){
System.out.println("this is connection "+str);
}
}
ConnectionMannager对象如下:
package ConnectionDemo;
import java.util.ArrayList;
public class ConnectionMannager {
private static int CONNECTION_NUM=20;
private static ArrayList<Connection> connections=new ArrayList<>();
private static ArrayList<Connection> uconnections=new ArrayList<>();
static {
for(int i=1;i<=CONNECTION_NUM;i++){
connections.add(new Connection(""+i));
}
}
private ConnectionMannager() {}
public synchronized static Connection getConnection(){
if(connections.size()>0){
Connection temp=connections.get(0);
uconnections.add(temp);
connections.remove(0);
return temp;
}
return null;
}
public synchronized static boolean returnConnection(Connection c){
if(uconnections.contains(c)){
connections.add(c);
uconnections.remove(c);
return true;
}
return false;
}
public static void main(String[] args) {
for(int i=1;i<=30;i++){
Connection c=getConnection();
c.describ();
returnConnection(c);
}
}
}
增加了returnConnection方法用来模拟把数据返回池的方法。效果良好。