2012-02-19 4 views
1

私は関数を実行したいが、その前にパスワードを確認したい。プロキシデザインパターンカプセル化ソリューション?

私はプロキシデザインパターンを使用することを選択しました。言葉で


は、

をパスワードを送信し、パスワードがOKであればを実行するためにWHAT FUNCTION彼にを伝え、Proxyクラスを作成します。

プロキシパターンによれば、内部全体がよりプライベートであるべきであるという問題があります。

ので - 私が...方法1/2の外部から

を参照してくださいカントと私はMethod1/2publicを作りたいいけない(と私は、Ifのを望んではいけません)。私は代理人を使いたい。

どのように(外部から)彼に有効なActionパラメータを送信できますか? (ac param)

私は各機能にパブリックアクションを実装する必要がありますか?

enter image description here

答えて

2

通常は実行したいメソッドは、プロキシクラスの一部であってはなりません。これは、このクラスの呼び出し側が通過している方法です。

public class ProxyClass 
{ 
    public ProxyClass(string password, Action ac) 
    { 
     if (password == "111") 
     { 
      ac(); 
     } 
    } 
} 

をし、その後、2番目の引数としてActionを渡すことができます。

public class Foo 
{ 
    public void Success() 
    { 
     ... some code that you want to execute in case of success 
    } 
} 

var proxy = new ProxyClass("111",() => 
{ 
    ... some code that you want to execute in case of success 
}); 

か、すでに定義されているいくつかの方法を持っている場合

できる:

var foo = new Foo(); 
var proxy = new ProxyClass("111", foo.Success); 
成功は、あなたが Fooのインスタンスを必要としない静的な方法であった場合の

var proxy = new ProxyClass("111", Foo.Success); 
+0

だから、法1/2()プロキシの呼び出し側に見えるはず? –

+0

@RoyiNamir、あなたがしたようにプロキシの中に定義しておけば、発信者がどちらを呼び出すかを決めることができるように見えるはずです。これらのメソッドがプロキシクラスの一部でない場合、呼び出し元は他のメソッドからそれらを渡すことができます。もちろん、コンストラクタに2番目の引数としてActionを渡す必要があるのは呼び出し元なので、このActionを呼び出し元に知らせる必要があります。 –

+0

その使い方がアクセスコントロールであるというデザインパターンが私には奇妙に思えます。 –

関連する問題