2012-02-23 11 views
1

私はいくつかの太いインターフェイスがあるとします。これは変更できません。また、私はいくつかのメソッドを使用したいと思ういくつかのクライアントクラスを持っています。どのようにインターフェイスの分離原理を達成するために、この状況のた​​めのアダプタパターンを実装することができますか?adapternパターンを実装することでfatインターフェイスをどのように分離できますか?

答えて

9

これは非常に簡単です。

interface IAmFat 
{ 
    void Method1(); 
    void Method2(); 
    ... 
    void MethodN(); 
} 

interface IAmSegregated 
{ 
    void Method1(); 
} 

class FatAdapter : IAmSegregated 
{ 
    private readonly IAmFat fat; 

    public FatAdapter(IAmFat fat) 
    { 
     this.fat = fat; 
    } 

    void IAmSegregated.Method1() 
    { 
     this.fat.Method1(); 
    } 
} 
+2

+1誰もがしたいんが(そのことについてまたは隔離)脂肪ことです:( – jgauffin

+0

だから私はまたIAmFatを実装するクラスを必要とし、そのインスタンスはFatAdapterコンストラクタに注入されるのですか? –

+0

いいえ、あなたの脂肪の場合クラスに静的メソッドがある場合は、それをまったく注入する必要はありません。単純に 'FatAdapter'から直接呼び出すことができます。 – Steven

0

アダプターは本当に適切なツールではありません。 2つの互換性のないインターフェースを互いに適合させることによって話すことができるように設計されています。この場合、エンドユーザーに異なる機能のサブセットを公開する必要があります。この場合、facadeを使用します。

class Fat{ 
    public string A(); 
    public int B(); 
    . 
    public void EatMeat() 
    . 
    public void Z(); 
} 
class JennyCraig{ 
    private Fat f = Fat(); 
    public string A(){ 
    return f.A(); 
    } 
    public void Z(){ 
    return f.Z(); 
    } 
class Atkins{ 
    public Fat f = Fat(); 

    public void EatMeat(){ 
     return f.EatMeat(); 
    } 
} 
関連する問題