デザインパターンのカリキュラムの設計モデルは4-3工場簡潔にソースコードを解析する簡単です

1つのソースの決意

1.1カレンダーのソースコードを解析

1.2 DriverManagerのソースの解析

 

 

 

1つのソースの決意
1.1カレンダーのソースコードを解析
  / ** 
     *指定されたタイムゾーンとデフォルトのロケールを使用してカレンダを取得します。
     * <コード>カレンダー</ code>は、現在の時刻に基づいて返された
     デフォルトロケールで指定されたタイムゾーンに*。
     * 
     * @paramのゾーンを使用するタイムゾーン
     * @return カレンダー。
     * / 
    パブリック 静的カレンダーのgetInstance(タイムゾーンのゾーン)
    { 
        戻りcreateCalendar(ゾーン、Locale.getDefault())。
    } 

プライベート 静的カレンダーcreateCalendar(タイムゾーンのゾーン、ロケールaLocale) { //指定されたロケールがタイのロケールの場合は、仏滅紀元返す // インスタンスを。 IF( "目" .equals(aLocale.getLanguage()) &&( "TH" .equals(aLocale.getCountry()))){ 新しいsun.util.BuddhistCalendar(ゾーン、aLocale)を返します。 }そうであれば( "JP" .equals(aLocale.getVariant()) && "JP" .equals(aLocale.getCountry()) && "JA" .equals(aLocale.getLanguage())){ 新しい戻り、ゾーン(JapaneseImperialCalendarをaLocale); } // 他のデフォルトのカレンダーが作成 返す 新しいてGregorianCalendar(ゾーン、aLocale)を、 }

 

1.2  DriverManagerの解析ソースコード(classForNameによって得られます)

 

    パブリック 静的接続のgetConnection(文字列のURL、
    java.util.Properties情報)スローのSQLExceptionが{ 
  
        // このメソッドを呼び出したコードのクラスローダを取得して 
     // nullで。
    クラスローダcallerCL = DriverManager.getCallerClassLoader()。

        リターン(のgetConnection(URL、情報、callerCL)); 
    } 

// パブリックのgetConnection()メソッドによって呼び出されるワーカー方法。
プライベート 静的接続のgetConnection( 文字列のURL、java.util.Properties情報、クラスローダcallerCL)がスローするSQLException { java.util.Vectorのドライバを =ヌル; / * * callerClがnullの場合は、我々は、アプリケーションのチェックする必要があります (間接的にこのクラスを呼び出している)* JDBCドライバクラスの外rt.jarののように、*クラスローダを *は、ここからロードすることができます。 * / 同期(のDriverManager。クラス){ // 正しいクラスローダのローディングを同期させます。 もし(callerCL == NULL ){ callerCL = にThread.currentThread()getContextClassLoader()。 } } もし(URL == nullの){ スロー 新しいをSQLException( "08001"、 "URLはNULLにすることはできません" ); } のprintln( "たDriverManager.getConnection(\" "+ URL + "\")" )。 もし(!初期化){ )(初期化; } 同期(のDriverManager。クラス){ // ドライバのreadcopy使用 ドライバ= readDriversと、 } // 接続を行おうとロードドライバを介して歩きます。 // 我々はそれをリレイズことができるように上げます最初の例外を覚えておいてください。 SQLException理由= nullを以下のためのint型私= 0; i)は(drivers.sizeを<; I ++ ){ DriverInfoジ = (DriverInfo)drivers.elementAt(I)。 // 呼び出し側はその後、ドライバをロードする権限を持っていない場合は 、// それをスキップします。 場合(!getCallerClass(callerCL、di.driverClassName)= di.driverClass){ のprintln( "スキップ" + DI)。 続け; } 試みる{ のprintln( "しようと" +のジ)。 接続結果 = di.driver.connect(URL、情報)。 もし(結果!= nullを){ // 成功! printlnは(+ "のgetConnectionを返す" ジ)。 リターン(結果); } } キャッチ(のSQLException EX){ 場合(理由== NULL ){ 理由 = EX。 } } } // 我々がここに来たならば、誰も接続することができませんでした。 もし(!理由= ヌル){ printlnの( "のgetConnectionに失敗しました:" + 理由)。 スロー理由; } のprintln("のgetConnection:見つかりませ最適なドライバ" + URL); スロー 新しいのSQLException(+ URL、 "08001" "が見つかりません、適切なドライバを" ); }

 

おすすめ

転載: www.cnblogs.com/1446358788-qq/p/11259551.html