請教,這樣需不需要使用物件池,這樣設計有問題嗎?

scorpio_leon發表於2002-11-16
自己的班級網站,不用什麼EJB,Struts的模式,簡單的javabean+servlet+jsp,但是想設計的好一點,剛寫到User部分遇到一個問題
User.java

public interface User {
    public abstract User getUserById(long userid);// like a static method
	public abstract int insert(Connection conn);
	public abstract int delete(Connection conn);
    public abstract int update(Connection conn);
    public abstract long getUserid();
    public abstract void setUserid(long id);
    ......
}
<p class="indent">

AbstractUser.java

public abstract class AbstractUser implements User {
	protected long userid;
	.......
    public abstract User getUserById(long userid);// like a static method
	......
}
<p class="indent">

以前這部分是直接寫User Class的,現在改成以上的模式,但發現原來用到的靜態方法不可寫在Interface中,只能寫成非靜態的(是不是像EJB2的Home方法?)
那麼在以下的UserManager需要用到很多次User中的這些"靜態方法",那麼我就想用一個User的靜態變數來呼叫那些方法
UserManager.java

public class UserManager {
    private static Logger logger =
        (Logger) Logger.getLogger(UserManager.class.getName());
    private static User USER = DAOFactory.getUser();
    ......
}    

<p class="indent">

DAOFactory.java

public class DAOFactory {
    
    private static Logger logger =
        (Logger) Logger.getLogger(DAOFactory.class.getName());

	public static User getUser() {
		User user = null;
		try {
			InitialContext ic = new InitialContext();
			String className = (String) ic.lookup(JNDINames.USER_DAO_CLASS);
			user = (User) Class.forName(className).newInstance();
		} catch (NamingException ne) {
            logger.error("DAOFactory.getUser occured a error about JNDI name: ", ne);
		} catch (Exception se) {
            logger.error("DAOFactory.getUser occured a unknown error: ", se);
		}
		return user;
	}

}

<p class="indent">


但我又擔心這些方法中的資料在共享訪問中會出現不一致,而同步這些方法開銷太大了吧,那麼我就是要用物件池?

不知道這樣考慮是不是有必要,關於資料在共享訪問,以及使用同步方面我理解不深,很不確定,謝謝解答 ^_^

相關文章