麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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,具有同上面一樣的實現,這就是模式之所以稱為模式的所在了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成年免费在线视频 | 欧美日比视频 | 国产999视频在线观看 | 国产一级免费片 | 国产精品白嫩白嫩大学美女 | 最新欧美精品一区二区三区 | 国产成人高清成人av片在线看 | 国产精品1区2区在线观看 | 国产一区二区午夜 | 女人久久久www免费人成看片 | 亚洲成在人 | 久久久久91视频 | 国产精品视频免费在线观看 | 国产成人精品午夜 | 欧美高清一级片 | 国产视频在线观看一区二区三区 | 久久久久久久久久久国产精品 | 韩国一大片a毛片 | 中文字幕爱爱视频 | 久久精品欧美电影 | 久久精品成人免费国产片桃视频 | 国产一区二区三区黄 | 久久亚洲线观看视频 | 精品国产一区二区三区在线观看 | 久久国产28 | 国产成人精品日本亚洲语音 | 毛片视频在线免费观看 | 国产免费一区二区三区最新不卡 | 欧美另类视频在线 | 免费国产一区二区视频 | 最新一级毛片 | av电影网在线观看 | 午夜视频在线免费观看 | 亚洲乱码精品久久久久 | 日美黄色片 | 小视频成人 | 日本一区二区三区视频在线 | 欧美精品一区二区三区在线 | 亚洲成人福利在线观看 | 成人黄色网战 | 久久久久久久午夜 |