ネッティー学習-IOのアーキテクチャー・システムの見直し
IOとNIOの学習
NIO -アウト1.4が起動
ネットワークアプリケーションフレームワークでは、NIOは、特定の内部のネッティーに、使用の多くを得ます
前提:IOのその理解
IOの概要とレビュー
- JavaのI / Oシステムを理解します
- I / OプログラミングのためのクラスとインタフェースJava.ioパッケージに泊まりました
- デザインパターンのJava IOの設計原理の把握との使用
Javaで考える - Javaプログラミングのアイデアを
言語設計者をプログラムするための、十分なIOシステムを設計することは困難な作業であり、
いくつかの基本的な概念
流れの概念
フローの入力/出力コンセプト
入力/出力クラス
バイトストリームと文字ストリーム
- 読み取りデータストリームの入力ロジック:
- ストリームを開きます
- 詳しくはしばらく
- 情報を読み取ります
- ストリームを閉じます
- 出力書き込みデータフロー・ロジック:
- 蒸気を開きます
- 詳しくはしばらく
- 書き込み情報
- ストリームを閉じます
ここで、入力ストリームは、入力ストリームは、出力ストリームである出力ストリームです。Iが出力され、タイムリー入力ストリームがあると言わないだろう。これは、NIOと区別の違いの間に非常に大きなギャップがあります。
- 分類流れ
- ノードストリーム:例えば、特定の場所から読み書きするストリームクラス:磁気ディスクやメモリ領域
- フローフィルタ:入力または出力ノードとして使用ストリーム。(バッファフロー)濾過流れノードパッケージです。フローろ過は、作成された既存の入力ストリームまたは出力ストリームのリンクを使用することです。
- Java.ioパッケージInputSteamクラス階層
Java.ioパッケージOutputSteamクラス階層
- リンクIOストリーム
- 入力ストリームのチェーン
- 出力ストリームチェーン
デザインモード*(装飾模様デコレータパターン)
流的调用
AAA
BBB
CCC
new CCC(new BBB(new AAA()));
new BBB(new AAA());
new AAA();
装飾的なパターンの概念:
- また、パッケージ(包装)モードとして知られる装飾模様、
- クライアント透過的に拡張する装飾的なパターンのターゲット機能は、代替統合の関係であります
- 順序で透明な方法で顧客の装飾的なパターンを動的より責任に添付オブジェクトへ。言い換えれば、クライアントは、前の装飾品とリアトリムに何が違うのを感じることはありません。
- 装飾的なパターンの場合は、拡張対象の機能がない複数のサブクラスを作成することができます。
- 装飾的なパターンを呼び出すクライアントのデリゲートには、装飾されるように。そのような拡張機能が完全に透明であることを主要な装飾模様。
- 装飾的なパターンは、元のクラスファイルと用途の継承、オブジェクト関数の動的拡張のケースを変更する必要がありません。それは本当にラップオブジェクトに装飾されたラッパーオブジェクトを作成することです。
役割の装飾パターン:
- 抽象建物の役割(コンポーネント):ユニットを標準化する抽象インタフェースを与えられたが、追加の責任を受け入れる準備ができています。
- 特定の建物の役割(コンクリートコンポーネント):クラスの定義は、追加の責任を受け入れる必要があります。
- 装飾的な役割(デコレータ):オブジェクトへの建物(コンポーネント)の参照を保持しており、インターフェイスと一貫性のあるインタフェースを構築するためのビジョンを定義します。
- 具体的な装飾的な役割(コンクリートデコレータ):オブジェクトの「ラベル」の追加責任を構築するための責任を負います。
装飾的なパターンの特徴
- 装飾的なオブジェクトやオブジェクトは、実際には同じインタフェースを持っています。だから、クライアントオブジェクトは、実際のオブジェクトと同じ方法や装飾品と相互作用することができること。
- 装飾的なオブジェクトは、実際のオブジェクト参照(参照)が含まれてい
- 装飾的なオブジェクトは、クライアントからのすべての要求を受け取ります。それは本当にオブジェクトにこれらの要求を転送します。
- または装飾品は、後に、以前の転送これらの要求の上にいくつかの追加機能を追加することができます。実行時に指定されたオブジェクトの構造を変更することなく、外部からの追加機能を追加できることをこれが保証されます。オブジェクト指向の設計パターンでは、通常丁拡張機能を継承することによって達成しました。
装飾的なパターンのコーディング
package com.dawa.decorator;
public interface Component {
void doSomething();
}
package com.dawa.decorator;
public class ConcreteComponent implements Component {
@Override
public void doSomething() {
System.out.println("功能A");
}
}
package com.dawa.decorator;
//核心类,满足装饰模式的特点
public class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void doSomething() {
component.doSomething();
}
}
package com.dawa.decorator;
public class ConcreteDecorator1 extends Decorator {
public ConcreteDecorator1(Component component) {
super(component);
}
@Override
public void doSomething() {
super.doSomething();
this.doAnotherThing();
}
private void doAnotherThing() {
System.out.println("功能a");
}
}
package com.dawa.decorator;
public class ConcreteDecorator2 extends Decorator {
public ConcreteDecorator2(Component component) {
super(component);
}
@Override
public void doSomething() {
super.doSomething();
this.doAnotherThing();
}
private void doAnotherThing() {
System.out.println("功能b");
}
}
package com.dawa.decorator;
public class Client {
public static void main(String[] args) {
Component component = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent()));
component.doSomething();
}
}
**全体のIOシステムでは、装飾的なパターンは、**どこにでもあります
ソースコードから、装飾的なパターンを使用する方法を見つけるために
BufferInputStreamはFilterInputSteamを拡張します
FilterInputSteamは延びて入力ストリーム(入力ストリームオブジェクト内)
PS:揮発性キーワード:1- 2-シーケンシャル可視。FilterInputSteamの内側に有用であること。自己拡張。
揮発性の可視性と秩序を確認し、原子性を保証するものではありません。
なぜIOでこのデザインパターンを使用するには?
より多くの自己生成地雷を避けるために、デザインパターンの大きな程度を使用してIOシステム。そして、あなたは私たち含ま構築されたオブジェクトの機能を豊かにするために実行することができます。
IOシステムなのでクラスをたくさん持っている、これはデザインパターンを適用していない場合は、クラスの急速な拡大につながることができます。そしてそれは、それは非常に融通の利かないし。
大方の場合、その機能は、音残っていること、加えて、システムのIOクラスの数はあまり膨潤しません。