Как я могу отделить толстый интерфейс через реализацию шаблона адаптера? - PullRequest
1 голос
/ 23 февраля 2012

Предположим, у меня есть какой-то толстый интерфейс, который нельзя изменить.А также у меня есть некоторый клиентский класс, который хочет использовать только несколько методов из этого толстого интерфейса.Как можно реализовать шаблон адаптера для этой ситуации, чтобы достичь принципа разделения интерфейса?

Ответы [ 2 ]

9 голосов
/ 23 февраля 2012

Это довольно просто.Вам нужно что-то вроде этого:

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();
    }
}
0 голосов
/ 23 февраля 2012

Адаптер здесь не совсем подходящий инструмент.Он разработан для того, чтобы два несовместимых интерфейса могли общаться, адаптируя один к другому.В этом случае вы хотите предоставить некоторое подмножество функций по-разному в зависимости от конечного пользователя.В этом случае вы хотите использовать фасад .

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();
    }
}
...