Как я могу отделить толстый интерфейс через реализацию шаблона адаптера?
Предположим, у меня есть какой-то толстый интерфейс, который нельзя изменить. А также у меня есть некоторый клиентский класс, который хочет использовать только несколько методов из этого толстого интерфейса. Как может быть реализован шаблон адаптера для этой ситуации, чтобы достичь принципа разделения интерфейса?
2 ответа
Решение
Это довольно просто. Вам нужно что-то вроде этого:
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();
}
}
Адаптер здесь не совсем подходящий инструмент. Он разработан для того, чтобы два несовместимых интерфейса могли общаться, адаптируя один к другому. В этом случае вы хотите предоставить некоторое подмножество функций по-разному в зависимости от конечного пользователя. В этом случае вы хотите использовать фасад.
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();
}
}