ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptデザインパターンインターフェース入門_JavaScriptスキル

JavaScriptデザインパターンインターフェース入門_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 17:51:481155ブラウズ

この本の最初の重要な内容はインターフェイスです。

インターフェイスについては誰もがよく知っているはずです。簡単に言えば、インターフェイスとは契約または仕様です。厳密に型指定されたオブジェクト指向言語では、インターフェイスを簡単に実装できます。ただし、JavaScript でインターフェイスを作成または実装したり、型が特定のインターフェイスを実装しているかどうかを判断したりするネイティブな方法はありません。インターフェイスをシミュレートするには js の柔軟性を使用するしかありません。
JavaScript でインターフェースを実装するには、アノテーションの記述、属性の検証、ダック モデルの 3 つの方法があります。
注: 私は英語の本を読んでいますが、翻訳能力が限られているため、いくつかの単語をどう訳せばよいのかわかりません。理解できるのは精神だけです。
1. コメント付きインターフェースの記述
例:

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

/*
interface Composite {
function add(child);
function delete(child);
function getChild(index);
function save();
}
*/
var CompositeForm = function(id, method, action) { // Composite, FormItem
...
}; 🎜>//複合インターフェースを実装します。
CompositeForm.prototype.add = function(child) {
...
};
CompositeForm.prototype.remove = function(child); >...
};
CompositeForm.prototype.getChild = function(index) {
...
};
// FormItem インターフェイスを実装します。 .save = function() {
...
};


他のオブジェクト指向言語をシミュレートし、インターフェイスを使用してキーワードを実装しますが、それらに注釈を付ける必要があるため、文法上の誤りはありません。
この目的は、これらのクラスがどのメソッドを実装する必要があり、プログラミング時に注意する必要があるかを他のプログラマに伝えることだけです。ただし、これらのクラスがこれらのインターフェイスのメソッドを正しく実装しているかどうかを確認するための検証方法は提供されていません。この方法は文書化されたアプローチです。
2. 属性チェックを使用したインターフェイスのエミュレーション
例:




コードをコピーします
コードは次のとおりです: /* インターフェース Composite { function add(child);
function getChild(index);
interface FormItem {
function save();
}
*/
var CompositeForm = function(id, メソッド, アクション) {
this.implementsInterfaces = ['Composite', 'FormItem'] ;
...
};
...
function addForm(formInstance) {
if(!implements(formInstance, 'Composite', 'FormItem')) {
throw new Error("オブジェクトは必要なインターフェイスを実装していません。");
}
...
}
// オブジェクトが // 必要なインターフェイスを実装します。
functionimplements(object) {
for(var i = 1; i < argument.length; i ) {
// すべての引数をループします
/ / 最初のものの後。 if(object.implementsInterfaces[j] == インターフェース名) {
InterfaceFound = true;
Break;
}
if(!interfaceFound) {
return false;
}
}
return true; 最初のメソッドの改良点として、インターフェイスの定義は引き続きアノテーションの形式で実装されますが、 type は特定のインターフェイスを実装します。
3. ダックタイピングによるインターフェイスのエミュレーション




コードをコピー


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

// インターフェース。
var Composite = new Interface('Composite', ['add', 'remove', 'getChild']);
var FormItem = new Interface('FormItem', ['save']);
// CompositeForm クラス
var CompositeForm = function(id, method, action) {
...
};
...
function addForm(formInstance) {
ensureImplements(formInstance, Composite, FormItem);
// 必要なメソッドが実装されていない場合、この関数はエラーをスローします。
...
}
// コンストラクター。
var Interface = function(name,methods) {
if(arguments.length != 2) {
throw new Error("インターフェイス コンストラクターが "
arguments.length " 引数で呼び出されていますが、期待されています正確に 2.");
}
this.name = 名前;
this.methods = [];
for(var i = 0, len =methods.length; i
if(typeofmethods[i] !== 'string') {
throw new Error("インターフェイス コンストラクターは、メソッド名が文字列として渡される "
" であることを期待します。");
}
this.methods.push(methods[i]);
}
};
// 静的クラスメソッド。
Interface.ensureImplements = function(object) {
if(arguments.length < 2) {
throw new Error("Function Interface.ensureImplements が "
arguments.length " 引数で呼び出されますが、少なくとも 2 が予想されます。");
}
for(var i = 1, len = argument.length; i < len; i ) {
varinterface = argument[i];
if(interface.constructor !== Interface) {
throw new Error("Function Interface.ensureImplements Expects argument"
"2つ以上はInterfaceのインスタンスになります。");
}
for(var j = 0,methodsLen =interface.methods.length; j varmethods=interface.methods[j];
if(!object[method] || typeof object[method] !== 'function') {
throw new Error("Function Interface.ensureImplements: object "
" は " インターフェイスを実装していません.name " インターフェイス。メソッド " メソッド " が見つかりませんでした。");
}
}
}
};

いつインターフェイスを使用しますか?インターフェイスの使用は、JavaScript のアクティブ性を制限する一方で、より複雑なシステムの設計を開始するときに、より効果的です。 は、共有コードをより活発にし、あらゆる種類の変更を送信でき、望ましい方法を保護します。インターフェースは、実装されていない API を頻繁に使用するか、他のプログラムに提供される独自のメソッドを使用する必要があるため、この場合、インターフェースは相当の価値があります。実装されている API が変更されたとき、公開プロセス中に API が変更された場合、そのインターフェイスを別の方法で実装できることをすぐに知ることができます。
インターフェイスをどのように使用しますか?
最初に問題となるのは、転送されるコードにインターフェイスの使用が適しているかどうかです。インターフェイスを使用する場合は、次のようなプロトコルの作成:
1. インターフェイスのソース ファイルを参照してください。インターフェイスのソース ファイルは、次のようにして次のステーション ポイントに到達できます: http://jsdesignpatterns.com /。
2. 転送されたコードを検査し、これらのメソッドがインターフェイス セクションに抽象化される必要があることを確認します。念のため、私たちは、第 3 のインターフェイス実装方式、つまり、代わりのインターフェイスを使用します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。