プロキシ パターンは一般的なデザイン パターンの 1 つで、実際のオブジェクトが直接呼び出されるのではなく、プロキシ オブジェクトを通じて間接的に実際のオブジェクトが呼び出されることを意味します。
なぜオブジェクトを呼び出すためにこの間接的な形式を使用する必要があるのでしょうか?一般に、クライアントが実際のオブジェクトに直接アクセスしたくない、または実際のオブジェクトにアクセスするのが難しいため、訴訟の代理人として弁護士を雇うなど、代理オブジェクトを介して間接的にアクセスが完了します。
プロキシデザインパターンと装飾デザインパターンの違い装飾モードはパッケージ化されたオブジェクトの機能を変更または拡張しますが、プロキシモードは一部の制御コードを追加することを除いて、そのアクセスを制御するだけであり、プロキシはオントロジーを変更しません。メソッドを変更するためにデコレーション モードが誕生しましたパッケージ化されたオブジェクトの作成方法、デコレーション モードはパッケージ化されたインスタンス化から完全に独立しており、仮想エージェントでは、このインスタンス化はプロキシ モードの一部です。は厳密に管理されており、内部で実行することは許可されていません。エージェント 構造
プロキシパターンのロール
/* Library interface. */ var Library = new Interface('Library', ['findBooks', 'checkoutBook', 'returnBook']);
/* PublicLibrary class. */ var PublicLibrary = function(books) { // implements Library this.catalog = {}; for(var i = 0, len = books.length; i < len; i++) { this.catalog[books[i].getIsbn()] = { book: books[i], available: true }; } }; PublicLibrary.prototype = { findBooks: function(searchString) { var results = []; for(var isbn in this.catalog) { if(!this.catalog.hasOwnProperty(isbn)) continue; if(searchString.match(this.catalog[isbn].getTitle()) || searchString.match(this.catalog[isbn].getAuthor())) { results.push(this.catalog[isbn]); } } return results; }, checkoutBook: function(book) { var isbn = book.getIsbn(); if(this.catalog[isbn]) { if(this.catalog[isbn].available) { this.catalog[isbn].available = false; return this.catalog[isbn]; } else { throw new Error('PublicLibrary: book ' + book.getTitle() + ' is not currently available.'); } } else { throw new Error('PublicLibrary: book ' + book.getTitle() + ' not found.'); } }, returnBook: function(book) { var isbn = book.getIsbn(); if(this.catalog[isbn]) { this.catalog[isbn].available = true; } else { throw new Error('PublicLibrary: book ' + book.getTitle() + ' not found.'); } } };
var PublicLibraryProxy = function(catalog) { // implements Library this.library = new PublicLibrary(catalog); }; PublicLibraryProxy.prototype = { findBooks: function(searchString) { return this.library.findBooks(searchString); }, checkoutBook: function(book) { return this.library.checkoutBook(book); }, returnBook: function(book) { return this.library.returnBook(book); } };
、
仮想エージェントは、作成にコストがかかるオントロジーへのアクセスを制御するために使用されます。これらは、メソッド (遅延読み込み) が呼び出されるまで、オントロジーのインスタンス化を延期します。 仮想プロキシ クラス
var PublicLibraryVirtualProxy = function(catalog) { // implements Library this.library = null; this.catalog = catalog; // Store the argument to the constructor. }; PublicLibraryVirtualProxy.prototype = { _initializeLibrary: function() { if(this.library === null) { this.library = new PublicLibrary(this.catalog); } }, findBooks: function(searchString) { this._initializeLibrary(); return this.library.findBooks(searchString); }, checkoutBook: function(book) { this._initializeLibrary(); return this.library.checkoutBook(book); }, returnBook: function(book) { this._initializeLibrary(); return this.library.returnBook(book); } };
以上がjsプロキシ設計パターンの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。