Предположим, у меня есть какой-то толстый интерфейс, который нельзя изменить. А также у меня есть какой-то клиентский класс, который хочет использовать только несколько методов из этого толстого интерфейса. Как можно реализовать шаблон адаптера для этой ситуации, чтобы достичь принципа разделения сегментов интерфейса?Как я могу отделить жирный интерфейс посредством реализации шаблона адаптации?
1
A
ответ
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();
}
}
0
Адаптер на самом деле не является подходящим инструментом здесь. Его цель состоит в том, чтобы сделать два несовместимых интерфейса способными говорить, адаптируя их друг к другу. В этом случае вы хотите, чтобы какой-то поднабор функциональности по-разному основывался на конечном пользователе. В этом случае вы хотите использовать 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();
}
}
+1 Никто не хочет, чтобы быть толстым (или сегрегация по этому вопросу) :( – jgauffin
Так что мне нужно также класс, который реализует IAmFat, и какой экземпляр будет введен в FatAdapter конструктор? –
Нет, если ваш жир класс не имеет интерфейса, вы просто вводите этот класс. И если у класса есть статические методы, вам вообще не нужно вводить его, вы можете просто вызвать один из них непосредственно из 'FatAdapter'. – Steven