構造設計パターン:クラスとクラス間の関係に焦点を当て
デコレータ:+クラスの組み合わせにより拡張する方法を継承、機能の種類は、トラフィッククラスを変更することなく、動的にも調整シーケンスを追加することができます。
抽象クラス
1 パブリック 抽象 クラスAbstractStudent 2 { 3 公共 のint Idを{ 取得します。セット; } 4 パブリック 文字列名前{ 得ます。セット; } 5 6 パブリック 抽象 ボイド研究()。 7 }
+抽象クラス組成を継承
1つの パブリック クラスBaseStudentDecorator:AbstractStudent 2 { 3 プライベート AbstractStudent _Student = NULL ; // 用了组合加オーバーライド 4 公共BaseStudentDecorator(AbstractStudent学生) 5 { 6 本 ._Student = 学生。 7 } 8 9 パブリック オーバーライド ボイド研究() 10 { 11 この._Student.Study()。 12 Console.WriteLineを(" ****************" ); 13の // 基底クラスは空装飾動作を繰り返さなければならない 14 } 15 }
呼ばれる進化
1人の AbstractStudent学生= 新しいStudentVip() 2 { 3 ID = 1234 、 4 名=は" oldkwok " 5 }。 6 // BaseStudentDecorator baseStudentDecorator =新しいBaseStudentDecorator(学生)。// 1 7 // AbstractStudent baseStudentDecorator =新しいBaseStudentDecorator(学生)。// 2 8 // 学生=新BaseStudentDecorator(学生)。// 3
アダプタまたはコードパターンなどの、2つの方法で分割することができるクラスの継承と組成に延びるたいです
1.継承:コールの時間はわずか1つのクラスを使用しますが、シングルを備えていますが
2.コンビネーション:あなたは拡張(多くの種類の組み合わせ)の多くを作るが、あなたがプロキシクラスとオリジナルのクラス2のカテゴリを初期化する必要があるときに呼び出すことができますが
デコレータは、両方の長所を兼ね備え:のみ、基本クラスは、その実装を作成するための呼び出しは、2を拡大させることができます。
追加機能は、蓄積することができ
1 StudentHomeworkDecorator(学生); // 3 2 学生= 新しい新しいStudentCommentDecorator(学生) 。3 スチューデント= 新しい新しい StudentHomeworkDecorator(学生); // 4 。4 。5 // 学生=新しい新しいStudentCommentDecorator(学生); 6 // トラフィッククラスを変更しません、自由に追加した機能デコレータ 7 // も調整することができるため
上記のコードは、パス、戻り値が得られる、機能を追加するためにデコレータを追加に相当し、次のパスのデコレータ、より多く(より機能)クラスを与えるために、添加入射における方法と理解することができます