ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript デザイン パターン テンプレート メソッド pattern_javascript スキルを学ぶ

JavaScript デザイン パターン テンプレート メソッド pattern_javascript スキルを学ぶ

WBOY
WBOYオリジナル
2016-05-16 15:19:051066ブラウズ

1. 定義

テンプレート メソッドは継承設計パターンに基づいており、システムのスケーラビリティを大幅に向上させることができます。 Java の抽象親クラスとサブクラス
テンプレート メソッドは構造の 2 つの部分で構成されます。最初の部分は抽象親クラスで、2 番目の部分は具象実装サブクラスです。

2. 例

コーヒーまたは紅茶
(1) 水を沸騰させる
(2) 茶葉を熱湯に浸す
(3) 紅茶をカップに注ぎます
(4)レモンを加える

/* 抽象父类:饮料 */
var Beverage = function(){};
// (1) 把水煮沸
Beverage.prototype.boilWater = function() {
  console.log("把水煮沸");
};
// (2) 沸水浸泡
Beverage.prototype.brew = function() {
  throw new Error("子类必须重写brew方法");
};
// (3) 倒进杯子
Beverage.prototype.pourInCup = function() {
  throw new Error("子类必须重写pourInCup方法");
};
// (4) 加调料
Beverage.prototype.addCondiments = function() {
  throw new Error("子类必须重写addCondiments方法");
};

/* 模板方法 */
Beverage.prototype.init = function() {
  this.boilWater();
  this.brew();
  this.pourInCup();
  this.addCondiments();
}

/* 实现子类 Coffee*/
var Coffee = function(){};
Coffee.prototype = new Beverage();
// 重写非公有方法
Coffee.prototype.brew = function() {
  console.log("用沸水冲泡咖啡");
};
Coffee.prototype.pourInCup = function() {
  console.log("把咖啡倒进杯子");
};
Coffee.prototype.addCondiments = function() {
  console.log("加牛奶");
};
var coffee = new Coffee();
coffee.init();

テンプレート メソッド パターンを使用して、サブクラスのアルゴリズム フレームワークが親クラスにカプセル化されます。これらのアルゴリズム フレームワークは、通常の状況ではほとんどのサブカテゴリに適していますが、「性格」サブカテゴリも表示されます。
上記のプロセスと同様に、調味料の追加はオプションです。
フック メソッドは、この問題を解決できます。フックを配置することは、変更を分離する一般的な手段です。

/* 添加钩子方法 */
Beverage.prototype.customerWantsCondiments = function() {
  return true;
};
Beverage.prototype.init = function() {
  this.boilWater();
  this.brew();
  this.pourInCup();
  if(this.customerWantsCondiments()) {
    this.addCondiments();
  }
}

/* 实现子类 Tea*/
var Tea = function(){};
Tea.prototype = new Beverage();
// 重写非公有方法
Tea.prototype.brew = function() {
  console.log("用沸水冲泡茶");
};
Tea.prototype.pourInCup = function() {
  console.log("把茶倒进杯子");
};
Tea.prototype.addCondiments = function() {
  console.log("加牛奶");
};
Tea.prototype.customerWantsCondiments = function() {
  return window.confirm("需要添加调料吗?");
};
var tea = new Tea();
tea.init();

JavaScript は、オブジェクト間の委任によって真のクラス継承を実現しません。

3. 「ハリウッドの原則」: 電話をかけないでください。私たちが電話します

一般的な使用シナリオ:

(1) テンプレート メソッド パターン: このデザイン パターンを使用すると、サブクラスは自身の制御を放棄し、代わりにサブクラスを親クラスに通知します。サブクラスとして、これは一部の設計の詳細を提供することのみを担当します。
(2) オブザーバー モード: パブリッシャーはメッセージをサブスクライバーにプッシュします。
(3) コールバック関数: ajax 非同期リクエストは、コールバック関数で実行する必要がある操作をカプセル化します。このコールバック関数は、データが返されたときにのみ実行されます。

この記事が、JavaScript プログラミングを学習する皆さんのお役に立てれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。