簡潔11-3 Decoratorパターンは、ソースコードを解析するカリキュラムデザインパターンデザインパターン

1つのソースの決意

1.1分析源1(jdk1.7のアプリケーション)

1.2分析源(2つの2 jdk1.7のアプリケーション

1.3ソースの解像度(春アプリケーション)3

1.4分析源4(サーブレットのアプリケーション)

1.5分析源5(アプリケーションmyBatiesで)

 

 

1つのソースの決意
1.1分析源1(jdk1.7のアプリケーション)

BufferedReaderの

/ ** 
  * 
  * BufferedReaderの继承了Readeの rは、并把リーダー组合到BufferedReaderの中
   * / 
パブリック クラス BufferedReaderのは、拡張リーダー{ 

    プライベートReaderでを。

/ ** 
     *の入力バッファでバッファリング文字入力ストリームを作成し
     、指定したサイズ*を。
     * 
     * @param   Readerで
     * @param   SZの入力バッファサイズ
     * 
     * @exceptionの  はIllegalArgumentException szが<= 0の場合
      * / 
    公共 BufferedReaderのは、中(リーダーint型SZ){
         スーパー()において、
        場合(SZ <= 0 スロー 新しい、IllegalArgumentExceptionを( "バッファサイズ<= 0" );
        この .IN = で。
        CB = 新しい CHAR [SZ]。
        nextChar = nChars = 0 
    } 

}

 

リーダー

/ ** 
   *リーダー是抽象类     
   * /  
パブリック 抽象 クラス Readerが実装{閉鎖可能、読み取り可能

 

1.2分析源(2つの2 jdk1.7のアプリケーション

図クラスのUML

 

装飾親サブクラス1:BufferedInputStreamを

パブリック
クラス にBufferedInputStreamは拡張FilterInputStream {
 
//入ってくる親親クラス
(入力ストリーム内)公共BufferedInputStreamを{ この;(DefaultBufferSize、中) } / ** * データストリームの読み取りを実現し、装飾的な役割を果たし * / プライベート ボイド塗りつぶしを()スローにIOException { バイト [] =バッファgetBufIfOpen(); IFは(markposの<0 POS = 0; / * NOマーク:捨てるバッファ* / IF(POS> = buffer.length) / *バッファ内に残さない部屋* / 場合(markposの> 0){ / * 捨てることができるバッファの初めの部分* / int型 SZ = POS - markposの。 System.arraycopyの(バッファ、markposの、バッファ、 0 、SZ)。 POS = SZ。 markposの = 0 ; } そう であれば(> = buffer.length marklimit){ markposの = -1。 / * バッファが大きすぎるなった、無効マーク* / POS = 0; / * ドロップバッファの内容* / } { / * バッファ成長* / INT = POS * 2 NSZ もし(NSZ> marklimit) NSZ = marklimit。 バイト NBUF [] = 新しい バイト[NSZ]。 System.arraycopyの(バッファ、 0、NBUF、0 、POS)。 場合(!bufUpdater.compareAndSet(これ、バッファ、NBUF)){ // 非同期近いがあった場合BUFを置き換えることはできません。 //注:塗りつぶし()場合、これは変更する必要があります 。//は、これまで複数のスレッドからアクセスできるようになります。 // しかし、今のところ、CASが失敗することができる唯一の方法は、近くを経ています。 // bufのを主張== nullを。 スロー 新しい IOExceptionが(「ストリームが閉じて」); } バッファ = NBUF。 } カウント = POSと、 INT、N = getInIfOpen()を読み出す(バッファ、POS、buffer.length - POS)。 もし(N> 0 カウント = N + POS。 } }

 

装飾親1: FilterInputStream

パブリック
クラス FilterInputStreamは延び入力ストリーム{
     / ** 
     *入力ストリームがフィルタリングされます。
     * / 
  で揮発性のInputStreamを保護。
    保護FilterInputStream(入力ストリームにおける){ 
        = this.in で; 
    } 
}  

 

装飾されたクラス:のInputStream

パブリック 抽象 クラス入力ストリームを実装閉鎖可能を{ 

}

 

装飾親クラス2:FileInputStreamを

パブリッククラス FileInputStreamのは、拡張のInputStream 
{ 
/ * 
 *   传入ファイルを、装饰成のInputStream
 * / 
公共のFileInputStream(File file)指定スローにFileNotFoundException { 
        文字列名 =(ファイルを=!ヌル file.getPath():?ヌル)。
        セキュリティマネージャのセキュリティ = System.getSecurityManager()。
        もし(!セキュリティ= ヌル){ 
            security.checkRead(名); 
        } 
        場合(名前== nullが){
             スロー 新規のNullPointerExceptionが(); 
        } 
        であれば(file.isInvalid()){
             スロー 新たにFileNotFoundExceptionを( "無効なファイル・パス" )。
        } 
        fdが = 新しい()のFileDescriptorします。
        fd.incrementAndGetUseCount(); 
        この .path = 名前; 
        (名前)を開きます。
    } 

}

 

 

1.3ソースの解像度(春アプリケーション)3

TransactionAwareCacheDecorator

/ ** 
   *このクラスは、クラスのキャッシュストレージおよび関連事項である
   * / 
パブリック クラス TransactionAwareCacheDecorator 実装キャッシュ {
     プライベート 決勝キャッシュ  TARGETCACHE; 

    公共TransactionAwareCacheDecoratorキャッシュ  TARGETCACHE){ 
        Assert.notNull(TARGETCACHE、「ターゲットではないが、キャッシュがNULLでなければなりません」);
         この .targetCache = TARGETCACHE; 
    } 
}

 

1.4分析源4(サーブレットのアプリケーション)

 

1.5分析源5(アプリケーションmyBatiesで)
パブリック クラス FifoCacheは、実装キャッシュ  { 

  民間 最終キャッシュデリゲートを。
  民間のDeque <オブジェクト> キーリスト。
  プライベート int型のサイズ。


  公共FifoCache(キャッシュデリゲート) {
     この .delegate = デリゲート。
    この .keyList = 新しい LinkedListは<オブジェクト> ();
    この .size = 1024 ; 
  } 
}

 

おすすめ

転載: www.cnblogs.com/1446358788-qq/p/11489540.html
おすすめ