题目:效仿示例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方法用来模拟把数据返回池的方法。效果良好。
原文:http://buptchj.iteye.com/blog/2249094