意味
アダプターモード(アダプター)は、クラス(オブジェクト)のインターフェイス(メソッドまたは属性)を顧客が望む別のインターフェイス(メソッドまたは属性)に変換することです。アダプターモードにより、インターフェイスの非互換性のために元々一緒に動作できなかったクラス(オブジェクト)が可能になります。クイックラッパー。
アダプターのエイリアスはラッパーであり、比較的単純なパターンです。プログラム開発には多くのこのようなシナリオがあります。モジュールまたはオブジェクトのインターフェイスを呼び出すと、このインターフェイスの形式が現在の要件を満たしていないことがわかります。現時点では2つの解決策があります。 1つ目は、元のインターフェイスの実装を変更することですが、元のモジュールが非常に複雑である場合、または取得したモジュールが他の誰かによって書かれた圧縮コードである場合、元のインターフェイスを変更することは非現実的です。 2番目の方法は、アダプターを作成し、元のインターフェイスを顧客が望む別のインターフェイスに変換することです。顧客はアダプターを処理するだけです。
なぜアダプターモードを使用する必要があるのですか?
アプリケーションを開発するときは、多くの場合、ログや同様のコンテンツを保持するために使用するライブラリなど、その一部を交換する必要があります。新しいライブラリに置き換えると、新しいライブラリがまったく同じインターフェイスを持っている可能性は低いです。ここから、2つのオプションがあります。
(1)すべてのコードを確認し、古いライブラリを指すすべてのコードを変更します。
(2)新しいライブラリが古いライブラリと同じインターフェイスを使用できるようにアダプターを作成します。
明らかに、場合によっては、アプリケーションが小さい場合、または古いライブラリへの参照がほとんどない場合、完全なコードをチェックして、新しいライブラリに一致するように変更する方が適切です。ただし、ほとんどの場合、アダプターの作成はより実用的で時間を節約できます。
JavaScriptコードの例
何かが起こる可能性があるとき、それは間違いなく起こります。まず、この小さなloggerFactoryを見てみましょう。これにより、より簡単に使用できるログインターフェイスを変更できます。
var loggerFactory = {getLogger:function(){return window.console; }、...};/*使用例*/var logger = loggerFactory.getLogger(); logger.log( "何かログに何か);GetLoggerを呼び出すと、コンソールオブジェクト(コンソール)が返されます。この演習では、コンソールオブジェクトには1つのメソッドのみがログのみであり、1つの文字列型パラメーターのみを受信できるとふりきます。次に、別のログインターフェイスがあります。これは、1)ブラウザ自体ではないコンソールとは異なり、JavaScriptに実装されるため、より複雑になります。 2)Ajaxを介してログをサーバーに送信します。これは、URLデータをエンコードする必要があることも意味します(コードは、話したいアダプターパターンとは何の関係もないため、関連する問題をエンコードするURLを特別に実装しません)。もちろん、コンソールとは異なるインターフェイスを使用します。
var ajaxlogger = {sendlog:function(){var data = this.urlencode(arguments); jquery.ajax({url: "http://example.com/log"、data:data}); }、urlencode:function(arg){... return encodedData; }、...};jQueryのAjaxリクエストを使用して、主に時間を節約し、アダプターモードでやりたくないことを無視しました。今やらなければならないことは、アダプターを作成し、以前のLoggerFactoryを変更して、コンソールオブジェクトの代わりにこのアダプターを返すことです。
var ajaxloggeradapter = {log:function(arg){ajaxlogger.sendlog(arg); }};/ * adcust loggerFactory */var loggerFactory = {getLogger:function(){// return値の変更ajaxloggeradapter; }、...};既存のコードに1行の変更を行い、プログラム全体でこの新しいログインターフェイスを使用できます。
複雑なアダプター
ログインターフェイスは非常に簡単な例です。 1つの方法しかないため、古い方法に直接マッピングすることは難しくありません。ほとんどの場合、これはそうではありません。これらのマップされた関数のパラメーターが完全に異なっており、古いインターフェイスにはこれらのパラメーターがまったくない可能性があり、自分で対処する必要があるという問題に遭遇する可能性があります。場合によっては、新しいインターフェイスがまったく使用されないため、いくつかのパラメーターを削除する必要があります。 2つのオブジェクト間のインターフェイスマッピングが難しすぎる場合、とにかく他の方法を考えなければなりません。