亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

jive中的abstract Factory

2019-11-18 13:17:43
字體:
來源:轉載
供稿:網友

  AbstractFactory模式和可擴展性
  假如要實現較好的可擴展性,AbstractFactory模式確實是一件利器。如上面所說,假如要創建的Forum接口的不同實現,而又不想更改代碼的話,就需要用到抽象工廠了。再Jive中,AuthorizationFactory類是一個抽象類,用來創建Authorization對象。這是一個抽象工廠,可以通過不同的子類來創建不同的Authorization對象。這個工廠的實現方法是:
  
  在AuthorizationFactory中使用一個PRivate static變量factory,用來引用具體的抽象工廠的實例:
  private static AuthorizationFactory factory = null;
  
  用一個private static的String,來指明具體的抽象工廠的子類類名:
  private static String className ="com.coolservlets.forum.database.DbAuthorizationFactory";
  
  然后是用一個private static的loadAuthorizationFactory方法來給這個factory變量賦值,生成具體的抽象工廠類:
  
    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();
            }
          }
        }
      }
  }
  
  在static的getAuthorization方法返回一個Authorization的過程中,先初始化工廠類factory變量,然后用factory的createAuthorization方法來創建:
  
    public static Authorization getAuthorization(String username,
        String passWord) throws UnauthorizedException
    {
      loadAuthorizationFactory();
      return factory.createAuthorization(username, password);
  }
  
  不同的子類有不同的createAuthorization方法的實現。比如在DbAuthorizationFactory這個AuthorizationFactory的數據庫實現子類中,createAuthorization方法是這樣實現的:
  
    public Authorization createAuthorization(String username, String password)
        throws UnauthorizedException
    {
      if (username == null password == null) {
        throw new UnauthorizedException();
      }
      password = StringUtils.hash(password);
      int userID = 0;
      Connection con = null;
      PreparedStatement pstmt = null;
      try {
        con = DbConnectionManager.getConnection();
        pstmt = con.prepareStatement(AUTHORIZE);
        pstmt.setString(1, username);
        pstmt.setString(2, password);
  
        ResultSet rs = pstmt.executeQuery();
        if (!rs.next()) {
          throw new UnauthorizedException();
        }
        userID = rs.getInt(1);
      }
      catch( SQLException sqle ) {
        System.err.println("Exception in DbAuthorizationFactory:" + sqle);
        sqle.printStackTrace();
        throw new UnauthorizedException();
      }
      finally {
        try { pstmt.close(); }
        catch (Exception e) { e.printStackTrace(); }
        try { con.close();  }
        catch (Exception e) { e.printStackTrace(); }
      }
      return new DbAuthorization(userID);
    }
  
  在這個類中,可以看到抽象類和具體的子類之間的關系,它們是如何協作的,又是如何劃分抽象方法和非抽象方法的,這都是值得注重的地方。一般的,抽象方法需要子類來實現,而抽象類中的非抽象方法應該所有子類所能夠共享的,或者可是說,是定義在抽象方法之上的較高層的方法。這確實是一個抽象工廠的好例子!雖然實現的方法已經和GOF中給出的實現相差較遠了,但思想沒變,這兒的實現,也確實是要巧妙的些。
  
  還有就是靜態方法的使用,使得這個類看起來有些Singleton的意味。這使得對于AbstractFactory的創建變得簡單。
  
  在AuthorizationFactory中定義的其它方法,涉及到具體的如何創建Authorization,都是作為abstract方法出現,具體實現留給子類來完成。
  
  這樣,在需要生成一個Authorization的時候,只需要調用AuthorizationFactory的靜態方法getAuthorization就可以了,由子類實現了具體的細節。
  
  其它的,如同上面講到的,在創建Forum的時候用的ForumFactory,具有同上面一樣的實現,這就是模式之所以稱為模式的所在了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩国产中文字幕| 欧美激情免费在线| 亚洲国产精品久久久久| 国产日韩在线一区| 国产精品免费电影| 黑人巨大精品欧美一区免费视频| 揄拍成人国产精品视频| 国产精品一区二区三区免费视频| 国产一区私人高清影院| 久久在精品线影院精品国产| 国产成人涩涩涩视频在线观看| 91深夜福利视频| 国产欧美日韩中文字幕| 国产欧美一区二区三区久久人妖| 午夜精品一区二区三区在线视频| 国产亚洲精品久久久| 国产精品欧美亚洲777777| 少妇精69xxtheporn| 亚洲天堂av高清| 成人午夜激情免费视频| 亚洲欧洲美洲在线综合| 亚洲欧美在线第一页| 中文字幕亚洲欧美在线| 日韩精品免费观看| 丝袜一区二区三区| 国产不卡精品视男人的天堂| 亚洲精品免费网站| 欧美日韩免费在线| 国产精品久久久久久久久久99| 久久精品2019中文字幕| 隔壁老王国产在线精品| 欧美黑人xxxⅹ高潮交| 欧美日韩第一页| 欧美xxxx做受欧美| 欧美成人在线免费视频| 久久久日本电影| 午夜精品视频网站| 国产www精品| 亚洲欧美制服第一页| 国产视频一区在线| 国产精品一区av| 91香蕉嫩草神马影院在线观看| 欧美日韩国产成人高清视频| 亚洲欧美第一页| 欧美日韩国产999| 日韩视频免费大全中文字幕| 亚洲视频在线视频| 国产精品1区2区在线观看| 日韩在线小视频| 日本精品视频网站| 欧美大片在线看免费观看| 亚洲欧美日韩网| 久久精品成人欧美大片| 久久久久久久久久婷婷| 国产精品久久婷婷六月丁香| 久久国产一区二区三区| 一区二区亚洲精品国产| 久久综合久中文字幕青草| 性欧美暴力猛交69hd| 亚洲跨种族黑人xxx| 久久亚洲国产精品成人av秋霞| 久久99热精品| 日本久久久a级免费| 久久99国产综合精品女同| 人九九综合九九宗合| 午夜精品久久久久久久99黑人| 日韩中文字幕第一页| www国产亚洲精品久久网站| xxxxx成人.com| 久久久精品免费视频| 日韩欧美亚洲一二三区| 成人黄色av网| 欧美极品第一页| 日韩av在线播放资源| 欧美精品videos另类日本| 国产亚洲综合久久| 亚洲精品国产精品国自产在线| 亚洲第一偷拍网| 日韩中文字幕亚洲| 成人免费激情视频| 国产精品高清在线观看| 亚洲人成网站777色婷婷| 91久久夜色精品国产网站| 日韩精品中文字| 日韩电影中文字幕在线| 最近2019年日本中文免费字幕| 91性高湖久久久久久久久_久久99| 欧美精品一区在线播放| 亚洲自拍偷拍福利| 红桃视频成人在线观看| 亚洲小视频在线观看| 国产精品欧美激情在线播放| 久久在线免费视频| 国产三级精品网站| 国产性猛交xxxx免费看久久| 亚洲国产精品视频在线观看| 国产亚洲欧美日韩精品| 91美女高潮出水| 九色91av视频| 欧美午夜片欧美片在线观看| 中文日韩在线观看| 日韩精品免费在线| 久久久www成人免费精品| 日韩av免费看| 国产日韩精品在线观看| 欧美色xxxx| 九九热99久久久国产盗摄| 国产精品亚洲视频在线观看| 欧美日韩一区二区在线| 久久精品久久久久| 亚洲视频专区在线| 亚洲第一区中文字幕| 亚洲精品乱码久久久久久按摩观| 日韩成人中文字幕在线观看| 亚洲欧美国产视频| 久久久久久久久久久免费精品| 久久综合久中文字幕青草| 国产精品黄色av| 狠狠久久五月精品中文字幕| 国内自拍欧美激情| 国产福利成人在线| 95av在线视频| 亚洲欧美制服中文字幕| 中文字幕精品久久久久| 国产精品一区二区三区免费视频| 在线观看久久av| 国产精品久久久久av| 国产精品啪视频| 日本精品性网站在线观看| 色综合色综合久久综合频道88| 久久精品亚洲94久久精品| 亚洲毛茸茸少妇高潮呻吟| 国产男人精品视频| 1769国产精品| 国产一区二区激情| 久久精品国产99国产精品澳门| 日韩av高清不卡| 精品福利在线观看| 亚洲午夜小视频| 日韩av综合网| 91久久国产精品91久久性色| 精品国产91久久久久久| 国产精品免费久久久久久| 亚洲伊人成综合成人网| 亚洲高清不卡av| 国产精品黄色av| 日韩美女在线观看一区| 国产精品日韩欧美大师| 国产午夜精品久久久| 九九热r在线视频精品| 欧美成年人视频网站欧美| 91av视频在线| 亚洲欧美中文日韩在线| 国产一区二区三区四区福利| 亚洲男人天堂2023| 欧美一区二区三区免费观看| 538国产精品一区二区在线| 国产69精品99久久久久久宅男| 亚洲在线观看视频网站| 亚洲在线www| 日韩精品中文字幕在线播放| 欧美日韩国产中文精品字幕自在自线| 国产视频亚洲精品| 欧美日韩免费观看中文|