ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptデザインパターンの抽象ファクトリーパターン入門_JavaScriptスキル

JavaScriptデザインパターンの抽象ファクトリーパターン入門_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 16:24:031340ブラウズ

抽象的なファクトリ パターンの説明

1. ファクトリ メソッド パターンの問題: ファクトリ メソッド パターンでは、クラスを作成するには、プログラムを拡張する場合、ファクトリ クラスを変更する必要があり、これはクロージャ原則に違反します。拡張は可能ですが、変更は禁止されています。設計には特定の問題があります。
2. 解決方法: 抽象ファクトリ パターンを使用する必要があります。これは、関数クラスとは別にファクトリ クラスを作成することで、以前のコードを変更する必要がなく、関数が拡張されます。
3. ファクトリ パターンは実際には、同じインターフェイスを実装する実装クラスを作成および呼び出すための統一されたファクトリ メソッドです。ただし、JavaScript にはインターフェイスのようなものが存在しないため、この実装層は削除されますが、そのメンバーとメソッドは関数クラスは同じである必要があります;

抽象ファクトリーのソース コードの例

1. メール送信タイプ:

コードをコピー コードは次のとおりです:

function MailSender() {
This.to = '';
This.title = '';
This.content = '';
}

MailSender.prototype.send = function() {
//本文を送信
}

2. SMS 送信カテゴリ:

コードをコピー コードは次のとおりです:

関数 SmsSender() {
This.to = '';
This.title = '';
This.content = '';
}

SmsSender.prototype.send = function() {
//本文を送信
}

3. ファクトリ インターフェイス クラスは最初にここで作成されましたが、ここでは削除され、各関数クラス ファクトリが直接作成されます。

1> メールファクトリークラス:


コードをコピー コードは次のとおりです:
関数 MailFactory() {

}
MailFactory.prototype.Produce = function() {
新しい MailSender();
を返します }

2>.SMS ファクトリ クラス:


コードをコピー コードは次のとおりです:
function SmsFactory() {

}
SmsFactory.prototype.Produce = function() {
新しい SmsSender();
を返します }

4. 使用方法:


コードをコピー コードは次のとおりです:
var Factory = new MailFactory();
var sender = Factory.Produce();
sender.to = 'toname#mail.com';
sender.title = '抽象的なファクトリ パターン';
sender.content = 'コンテンツを送信';
sender.send();

その他の指示

Java や .net C# などのオブジェクト指向言語で使用されるファクトリ パターンはすべてインターフェイスを使用します。インターフェイスは、この関数を適用するためにどのようなメソッドが使用されるか、およびユーザーがそれをどのように使用するかを記述します。 .インターフェース。オブジェクトはクラスの形式で表現され、現実世界のある種の抽象化を表します。おそらく、上記の電子メールの送信、SMS の送信、ショッピング モールでのさまざまなプロモーション方法、動物の世界など、同様の用途が数多くあります。鳥や動物など

ユーザーにインターフェイスを提供しない場合、必然的に実際の関数クラス オブジェクトがユーザーに提供されることになりますが、これは許可されていません。

ファクトリ メソッド パターンと抽象ファクトリ パターンは、この問題を非常にうまく解決できます。ユーザーは、インターフェイスを使用してファクトリ クラスを呼び出して、指定された操作を実行するだけです。これにより、拡張関数クラスとファクトリがさらに簡単に使用できるようになります。クラスは、対応するインターフェイス上に独自のクラスレベルの拡張機能を実装し、他のクラスやメソッドの変更を必要としません。

もちろん、JavaScript のような言語ではこれを行う方法はありません。プログラマは自制心を持たなければなりません。

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