Javascript設計モード-テンプレートメソッドモード

4375 ワード

テンプレートメソッドは、操作中のアルゴリズムのスケルトンを定義し、いくつかのステップをサブクラスに遅延します.テンプレートメソッドにより、サブクラスは、アルゴリズムの構造を変更することなく、アルゴリズムの特定のステップを再定義することができる.
テンプレート・メソッドは、クラス・ライブラリ内の共通の動作を抽出するため、クラス・ライブラリで特に重要なコード多重化の基本技術です.テンプレートメソッドは、伝説の「ハリウッドの法則」、すなわち「私たちを探さないで、私たちはあなたを探しています」という逆の制御構造をもたらします.これは、親が反対ではなく、クラスの操作を呼び出すことを意味します.具体的には,オブジェクト向けプログラミング言語における抽象クラス(およびその中の抽象メソッド)と,その抽象クラス(および抽象メソッド)を継承するサブクラスである.
 
ケース:私は一連の活動があります.例えば、満減、満贈、パッケージなどの活動があります.活動を実行する前後にいくつかの論理が処理する必要があります.私たちはこれらの論理を親クラスにカプセル化することができます.活動クラスは現在の活動の論理を処理するだけでいいです.
アクティブベースクラス:
var ActiveBase=function(){
    this.resultPrice=0;
};
ActiveBase.prototype.checkProductPrice=function(){
    console.info("      ");
};
ActiveBase.prototype.checkProductCount=function(){
    console.info("      ");
};
ActiveBase.prototype.isExecute=function(){/**/
    return true;
};
ActiveBase.prototype.activeRule=function(){/**/
    console.info("       ");
};
ActiveBase.prototype.execute=function(){/*    */
    console.info("      ");
    this.checkProductPrice();
    this.checkProductCount();
    if (this.isExecute()) {
        this.activeRule();
    }
};

クーポン活動:
var CouponActive=function(){
    ActiveBase.apply(this);
};
CouponActive.prototype = new ActiveBase();

CouponActive.prototype.activeRule = function(){
    console.info("======    =======");
    this.resultPrice=20;
};
CouponActive.prototype.isExecute=function(){return true;};

クライアント:
var couponActive = new CouponActive();
couponActive.execute();
console.info(""+couponActive.resultPrice);

コンソール出力:
      
      
      
======    =======20