변경할 수없는 뚱뚱한 인터페이스가 있다고 가정 해보십시오. 또한 그 지방 인터페이스에서 몇 가지 메서드를 사용하려는 클라이언트 클래스가 있습니다. 인터페이스 분리 원칙을 달성하기 위해 어떻게이 상황을위한 어댑터 패턴을 구현할 수 있습니까?adaptern 패턴을 구현하여 뚱뚱한 인터페이스를 어떻게 구분할 수 있습니까?
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();
}
}
하나는 (그 문제에 대한 또는 분리) 지방으로 :( – jgauffin
그래서 나는 또한 IAmFat를 구현하는 클래스를 필요, 그리고 어떤 인스턴스는 FatAdapter 생성자에 주입 될 것인가? –
아니, 경우 지방 클래스에는 인터페이스가 없으므로 클래스를 삽입하면됩니다. 클래스에 정적 메서드가 있으면 전혀 삽입 할 필요가 없으며 간단히 'FatAdapter'에서 직접 호출 할 수 있습니다. – Steven