デコレーターモードの説明
注:1つのクラスを使用して、別のクラスの機能的オブジェクトを前後に動的に変更し、追加の機能を追加します。これは、クラスオブジェクトの関数の装飾です。装飾クラスと装飾クラスには、同じアクセスインターフェイス方法(機能)が必要です。動的なオブジェクト指向クラスでは、一般に、同じインターフェイスの実装によって実装が制約されます。装飾クラスは、装飾クラスの対応する装飾クラスの方法を呼び出すために使用され、それを変更するために使用される装飾クラスへの参照を持つ必要があります。
シナリオの例:
1>。たとえば、私たちの生活、シャツ、スーツのジャケット、ズボン、ネクタイ、美しい革の靴を着るとき。それぞれの余分なものは、正面または全身の装飾です。
2>。たとえば、クラスの下には、ログを記述するために使用される可能性のある関数メソッドがあります。これは、ユーザーがそのような関数をログインするために使用される場合があります。おそらく、ログを書く前に現在のオペレーター情報を取得するか、ログインした後にログを書き込む必要があります。ログを書く前の追加操作は、一般にログを書く目的です。ロギング後にログを書き込むことは、通常、ログプロセスの操作情報でもあります。
したがって、デコレータモードは実装に使用され、2つは同様に動作します。これは、デコレーターの機能的オブジェクトのデコレーターの拡張であり、本質的に元の方法と同じ機能範囲です。
インスタンスソースコード
1。装飾されたカテゴリ
コードコピーは次のとおりです。
function wear(){
}
wear.prototype.shirt = function(){
//シャツを着ます
console.log( 'wear a shart');
}
2。デコレーター
コードコピーは次のとおりです。
関数デコレーター(摩耗){
this.wear = wear;
}
decorator.prototype.shirt = function(){
this.wear.shirt();
//シャツを着た後、私は再びネクタイをしました
}
3。使い方
コードコピーは次のとおりです。
var wear = new Wear();
varデコレーター= new Decorator(wear);
decorator.shirt();
これにより、摩耗シャツ機能オブジェクトの動的拡張装飾が可能になります。元の装飾方法がどのように実行されるかを知る必要はありません。その関数が何であるかを知っているだけで、追加したい追加機能が何であるかを知ります。
その他の指示
デコレーターパターンは、オブジェクト指向の方法を真に撤回します。拡張に開放して修正に閉じるという原則です。目的のすべての機能的方法は、[装飾されたクラス摩耗]を変更せず、[デコレータークラスデコレーター]を拡張せずに実行されます。
デコレーターモデルの主な特徴は、デコレーターの装飾を達成するために、デコレーターのデコレーターへの参照がデコレータの装飾を実現することです。
シミュレーション:最初にシャツを着て、次にネクタイを着て、次にスーツを着る:上のデコレーターは変わらないままです。
2。デコレーター:
コードコピーは次のとおりです。
関数デコレーター(摩耗){
this.wear = wear;
}
decorator.prototype.shirt = function(){
this.wear.shirt(); //ここではシャツのみを着用してください。
}
3.デコレーターのサブクラスを継承するのと同様のネクタイ装着クラスとスーツを着たクラスを作成する
コードコピーは次のとおりです。
function decorator_tie(デコレーター){
this.decorator = Decorator;
}
decorator_tie.prototype.shirt = function(){
this.decorator.shirt(); //シャツを着ます
console.log( '再びネクタイを着用');
}
function decorator_western(decorator){
this.decorator = Decorator;
}
decorator_western.prototype.shirt = function(){
this.decorator.shirt();
console.log( '再びスーツを着る');
}
使い方:
コードコピーは次のとおりです。
//最初にシャツを着ます
var wear = new Wear();
varデコレーター= new Decorator(wear);
//decorator.shirt();
//ネクタイをもう一度着用してください
var tie = new Decorator_tie(Decorator);
//tie.shirt();
//もう一度スーツを着ます
var Western = new Decorator_Western(TIE);
Western.shirt();
これは、ドレッシングと装飾の模擬例です。