2016-05-31 3 views
0
function BankOperationChecker() { 
    //This is the facade 
    this.applyFor = function(facadeMethods) { 
     for (var method in facadeMethods) { 
      facadeMethods[method](); 
     } 
    } 
} 

function BankClient(name, amount) { 
    this.name = name; 
    this.amount = amount; 
    this.bankOperations = new BankOperationChecker(); 
} 

var client = new BankClient("Davi Vieira", 2000); 
var checkMethods = { 
    cleanBackground: function() { 
     console.log('The background of this client is clean.'); 
    }, 
    canGetCredit: function() { 
     if (client.amount > 1000) { 
      console.log('Can get credit!'); 
     } else { 
      console.log('Cannot get credit!'); 
     } 
    } 
} 

client.bankOperations.applyFor(checkMethods); 

あなたはどう思いますか?入り口のファサードはちょうど1つですが...そうですか?ファサードの作成に関する具体的なルールはありますか?これは(以下の)ファサード(構造設計パターン)と考えることができますか?

+0

あなたはどう思いますか?何か考えましたか? –

+1

非常に賢いデザイン。 BankOperationCheckerをクライアント内部で集約する利点は何ですか?クライアントインスタンスを動的に使用することさえありません。 BankOperationCheckerは実際には何もチェックしていないようで、ループ内のメソッドを実行するだけです。 – plalx

+0

ファサードパターンは、ほとんどのあらゆる抽象化コードが「ファサード」と呼ばれることができるので、かなりグローバルなデザインパターンです。しかし、あなたのケースでは、BankOperationChecker関数のクラスを公開すると、パターンの一部が破損することを願っています。 Addyの本を見てください。https://addyosmani.com/resources/essentialjsdesignpatterns/book/#facadepatternjavascript –

答えて

0

いいえ、できません。

ファサードは、「建物の顔、特に通りや広場を見下ろす主要な正面」を意味します。このため、多くの人々はファサードパターンを、他のものへの入り口として機能するものとして混乱させます。しかし、そうではありません。 this 1として

、ファサードパターンの背後にある意図は、次のとおり

  • サブシステム内のインタフェースのセットに統一されたインタフェースを提供します。ファサードは、サブシステムを使いやすくするための高水準インターフェースを定義しています。
  • より簡単なインターフェイスで複雑なサブシステムをラップします。

この例では、サブシステムの束がなく、すべてを包むためのインタフェースもありません。

関連する問題