java编程思想练习题-第6章练习8-简单工厂方法和池初探

题目:效仿示例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方法用来模拟把数据返回池的方法。效果良好。

你可能感兴趣的:(java,java编程思想课后题)