はじめに:1は、これら2つのモードを説明しなければならないのはなぜ、何かサンパウロの言葉を言う:(* ^ _ ^ *)比較的単純なので、実際には、彼ら二人は似ており、時には我々は、概念を混同しがちです。
デザインパターンと他の「Decoratorパターン」について話した二人は、構造パターン分類に従い、それらの類似した、3つのすべては、我々はアダプタモードと外観モードが何であるかを見しようとしている、「構造モデル」ですました。
また、装飾的なパターンは、私は→別のブログ記事を参照することができますヘッドファーストデザインパターンを- Decoratorパターン。
まず、アダプタモード
私たちの実生活の例にアダプタ対応し、最も典型的にはプラグインターフェースアダプタでは、例えば、我々は携帯電話の一部の香港版を買ったヘッド丸い三角形プラグ、電源ストリップの三角形の大陸は、プラグの香港版に得ることができませんでし充電されます。
我々はアダプタを購入することになります。この時間は宝物に変換し、このアダプタは、アダプタ、彼は私たちの内部の電源タップに接続することができるように頭を充電する携帯電話の香港版に適応するためにそれを使用します。
何このアダプタデザインモードでは、動作するようにどのようにプログラムは、私は栗を与えてみましょう:私たちは、アダプタを介してアヒルや鶏を変換しないかアヒル、鶏を、持っています。
多くのカモがありますが、私たちはアヒルのインターフェース、そしてマガモの例を定義します。このモードでは約マガモは、ポリシーに便利ですが、私はマガモ戦略モード→かき混ぜるか、別の記事を参照することができStrategyパターン-ヘッドファーストデザインパターンを
アヒルインターフェイスパブリック { //呼ば 公共ボイドクワック(); //フライング 公共ボイドフライを(); } GreenDuck公共クラス:アヒル { 公共ボイドフライ() { Console.WriteLineを( "マガモは、フライ"); } 公共クワック()無効 { Console.WriteLineを( "マガモ、いんちきを"); } }
同様に、我々は鶏のインタフェースを定義し、鶏のクラス
チキン・インターフェースを公開 { 呼ば// ます。public voidガツガツ食べる、(); //飛んで ます。public voidフライ(); } publicクラス編:チキン { 公共空ガツガツ食べる、() { Console.WriteLineを( "編、cluckと"); } 公共ボイド飛ぶ() { Console.WriteLineを( "鶏、フライ"); } }
アヒルや鶏の音異なる、そして今、私たちは、Adapterパターンの使用を作る方法を、鶏のアヒルを偽装してみましょう。コードのそれで直接見て
/// <まとめ> ///ニワトリアダプタ カモにそれを適合///鶏 /// </要約> パブリッククラスHenAdapter:ダック { チキン鶏肉、 公共HenAdapter(チキンチキン) { this.chickenニワトリ=; } 公共ボイドクワック() { //コール鶏がcluckと chicken.Gobble(); } 公共ボイドフライを() { //コール編フライ chicken.Flyを(); } }
テスト編アダプタ
我々は、アダプタ編編適応を使用するようになったアヒル、カモもアヒル鶏にアダプタを使用することができ、アダプタスキーマ定義に適応:
アダプタモード:クラスのインタフェースは、別のインターフェイス顧客の期待にロードされました。アダプタので、元のインタフェースはクラスと互換性がないことをシームレスに共同作業を行うことができます。
Decoratorパターンや行動のようなアダプタのルックスは、ラップされたオブジェクト、それらはインタフェース用にインストールされていない、梱包し続けることができる、およびアダプタはインタフェースを変換するパッケージ化された後のデコレータの責任です。
仕事の適応はほとんどの例は、アダプタアダプタを取っているが、包装が人を適応できますが、時には我々は、より適した人物をパッケージ化するアダプタを取得する必要があり、別のインターフェイスへのインタフェースを変換することです。
これは実際にも、別のモードを伴う外観モード、アダプタモードであり、我々は多くの場合、外観モードを混同し、その後、外観モードを説明するために行ってきました。
第二に、外観モード
画面、DVD、オーディオ、照明など:エクステリアホームシアターモード、例えば、のようなホームシアターを構成する多くのコンポーネントは、あります。
私たちは、ディスプレイを開きDVD、オープン音を開いて、照明や一連のアクションをオフにするには、映画の時間を見てみると、これらのアクションは、記述されたクラスのメソッドを呼び出します
画面の画面には、新しい画面を()=; DVDのDVD =新しいDVD(); SoundEngineerサウンド=新しいSoundEngineer(); 光光=新しい光()。 screen.Down(); dvd.PlayDVD(); sound.TurnOn(); light.TurnOff();
あなたはそれを閉じたい場合は、我々が使用するたびに、これらの方法のいずれかを呼び出す必要があり、我々はまた、1つを呼び出す必要が見ることができます。インターフェイスの外観を実装することで、より合理的な提供のクラス:そして、我々はポジティブな外観である必要があります。
またはコードを見て
パブリッククラスHomeThreaterFacade { スクリーン画面。 DVDのDVD。 SoundEngineer音。 光光; 公共HomeThreaterFacade(スクリーン画面、DVDのDVD、SoundEngineer音、ライト光) { this.screen =スクリーン。 this.dvd = DVD。 this.sound =音。 this.light光=。 } 公共ボイドWatchMovie() { Console.WriteLineを( "开始播放电影......")。 screen.Down(); dvd.PlayDVD(); sound.TurnOn(); light.TurnOff(); } }
印刷出力の他のタイプは、比較的簡単ですのでだけでなく、近くに同じ方法は非常に簡単な方法が実現されてもいるように、私は、ここに表示されません。
またはテストの結果:
外観パターン定義
ファサード・パターンは:統一されたインタフェース、グループ・サブシステムにアクセスするために使用するインタフェースを提供します。使用するサブシステムが容易に可能に高レベルのインターフェイスの外観。
Facadeパターンは、設計原理に従っ
最小の原則の知識:話にあなたの親しい友人の合計。
私たちは、変更されたシステムの一部が、それは他の部分に影響を与えますので、あまりにも多くのクラスは、一緒に結合させてはいけない、デザインにこの原理を願っています。外観モードは、ユーザーが顧客がシンプルで柔軟なことができ、サブシステムコンポーネントのすべてを気にしないでくださいすることができます。私たちは、アセンブリ内の外観の顧客のモードに影響を与えずにアップグレードすることができ、顧客は、外観モードである唯一の友人、です。
第三に、アダプタモードと外観モードの違い
クラスのアダプタ、および外観は、多くのクラスを表すことができます。上記の例から、我々は、アダプタとモデルの外観の違いがあると思うかもしれません
しかし、彼らの本当の自然とパッケージングの役割は、私たちが一般的にカテゴリに合うが、特別なニーズにも複数のクラスを提供するように適合することができますどのように多くのクラスの顧客への1つまたは複数のインターフェイスは、インターフェイスを期待するアダプタモードではありませんインタフェース。クラスは競合の外観のみ複雑なクラスインターフェースに単純化インターフェースを提供することができる、です。2つのモデルの違いは、自分の意思です。アダプタモードは、インタフェースの外観を簡単にするために意図され、インターフェース装置は、異なるインターフェースに変更されることが意図されます。