작은 디자인 모드 (6) 어댑터 모드
2425 단어 디자인 모드스 몰 디자인 모드
어댑터 는 클래스 어댑터 와 대상 어댑터 로 나 뉘 는데 클래스 어댑터 의 실현 은 다 중 계승 이 필요 하지만 C \ # 는 다 중 계승 을 지원 하지 않 기 때문에 본 고 는 대상 어댑터 만 논의 하고 자 한다.
만약 에 우리 의 게임 에 두 가지 종류 가 있다 고 가정 하면 식물 과 동물, 식물 은 채집 할 수 있 고 동물 의 피 는 공격 을 받 을 수 있다.
정 의 는 다음 과 같 습 니 다.
public class Plant
{
public virtual void BeCollected()
{
Console.WriteLine ("Drop seeds");
}
}
public class Animal
{
public int hp { get; private set;}
public int atk {get; private set;}
public Animal()
{
hp = 100;
atk = 20;
}
public void BeAttacked(Animal attacker)
{
if (hp > 0) {
hp -= attacker.atk;
}
if (hp <= 0) {
AnimalDead ();
}
}
protected virtual void AnimalDead()
{
Console.WriteLine ("Drop meat");
}
}
사용:
Plant plant = new Plant ();
plant.BeCollected ();
Animal animal = new Animal ();
Animal attacker = new Animal ();
while (animal.hp > 0) {
animal.BeAttacked (attacker);
}
이때 계획 을 세 웠 습 니 다. 당신 에 게 우 리 는 피 라 니 아 꽃 이 필요 합 니 다. 피 가 있 으 면 공격 을 받 을 수도 있 고 다른 사람 을 공격 할 수도 있 지만 죽 으 면 씨앗 이 떨 어 집 니 다.
처음부터 이런 상황 을 고려 하지 않 았 기 때문에 Plant 에 hp, atk 속성 과 BeAttacked 방법 을 추가 하 는 것 은 적절 하지 않 을 수 있 습 니 다. 이것 은 Animal 류 의 코드 를 두 번 쓰 는 것 을 의미 하기 때문에 유지 에 불리 합 니 다.Plant 자체 가 다른 종류 에서 물 려 받 을 수도 있 고, 이 경우 에 도 Animal 을 물 려 받 을 수 없다.그리고 이 는 인터페이스 격 리 원칙 과 조합 / 취 합 재 활용 원칙 에 도 위배 된다.
이때 어댑터 모드 를 고려 할 수 있 습 니 다.
public class PiranhaAdapter : Animal
{
private Plant _plant = new Plant();
protected override void AnimalDead()
{
_plant.BeCollected ();
}
}
사용:
PiranhaAdapter piranha = new PiranhaAdapter ();
while (piranha.hp > 0) {
piranha.BeAttacked (attacker);
}
이렇게 하면 식 인 화 문 제 를 잘 해결 한 것 같다.
하지만 어 쩔 수 없 이 어댑터 모드 는 어 쩔 수 없 는 방법 이다.가능 하 다 면 프로그램 설계 초기 에 이러한 문 제 를 고려 하여 더욱 합 리 적 인 계승 관 계 를 작성 하 십시오 (예 를 들 어 Plant 와 Animal 은 모두 Creature 류 에 계승 되 고 Creature 에는 혈 량 과 공 격 력 등 속성 이 포함 되 어 있 으 며 Plant 에는 이 두 값 이 모두 0 입 니 다).또는 프로그램의 완성 도가 높 지 않 을 때 제때에 재 구성 해 야 한다.어 쩔 수 없 는 상황 에서 만 어댑터 모드 를 고려 할 수 있 습 니 다.
어댑터 모드 의 또 다른 용 도 는 외부 API 의 인 터 페 이 스 를 통일 하 는 것 이다.예 를 들 어 작은 말 디자인 모델 (3) 추상 적 인 공장 모델 에서 언급 한 안 드 로 이 드 와 IOS 의 적합 문제 에 대해 안 드 로 이 드 키보드 와 IOSKyboard 처럼 구체 적 으로 인터페이스 전환 을 실현 하 는 유형 은 그 자체 가 어댑터 모델 의 실제 응용 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.