前言 Jive是一個開放的java源代碼項目。其目標是建設一個開放結構的,強壯的,易于擴展的基于jsp的論壇。在其設計目標的指導下,其結構設計得非常得好,融合了很多新的觀念,比如Design Pattern,可更換的SKIN,可插入Plug等等。

圖1:Jive整體關系
你可能會有疑問,為什么會都是接口呢?這是基于擴展性考慮的。在Jive給出的實現中,所有的這些接口,Forum,ForumMessage,User等等,都使用數據庫來實現的,一條消息,或者一個用戶對應于數據庫中的一條消息Jive使用了DbForum,DbForumMessage,DbUser等類來實現這些接口,通過JDBC來操作數據庫,使之作為論壇的底層支撐。
然而,有時候,或許我們并不想使用數據庫,比如我們想只是使用文件系統來作為論壇的底層支撐,這時候,我們需要做的只是編碼實現了Forum等等接口的諸如FileFroum,FileForumMessage等對象,然后嵌入Jive中即可,原有的任何代碼都可以不用改變!!!這就是面向接口編程的威力了!
下面來看看具體的設計和編碼。
AbstractFactory模式和可擴展性
假如要實現較好的可擴展性,AbstractFactory模式確實是一件利器。如上面所說,假如要創建的Forum接口的不同實現,而又不想更改代碼的話,就需要用到抽象工廠了。再Jive中,AuthorizationFactory類是一個抽象類,用來創建Authorization對象。這是一個抽象工廠,可以通過不同的子類來創建不同的Authorization對象。這個工廠的實現方法是:
在AuthorizationFactory中使用一個PRivate static變量factory,用來引用具體的抽象工廠的實例:
private static AuthorizationFactory factory = null;
private static String className ="com.coolservlets.forum.database.DbAuthorizationFactory";
private static void loadAuthorizationFactory() {
if (factory == null) {
synchronized(className) {
if (factory == null) {
String classNameProp = PropertyManager.getProperty(
"AuthorizationFactory.className"
);
if (classNameProp != null) {
className = classNameProp;
}
try {
Class c = Class.forName(className);
factory = (AuthorizationFactory)c.newInstance();
}
catch (Exception e) {
System.err.println("Exception loading class: " + e);
e.printStackTrace();
}
}
}
}
}
新聞熱點
疑難解答