HeadFirst 디자인 모델 - 프롤로그 요약

1503 단어 first
1 오리 추상 류
class Duck

{

  quack();

  swim();

  virtual display()=0

};


 지금 오리 가 날 수 있 게
class Duck

{

  quack();

  swim();

  fly();

  virtual display()=0

};


추상 류 에 fly () 를 더 하면 좋 은 방안 이 아 닐 것 이다. 파생 류 에서 (각종 다른 오리) 어떤 오 리 는 날 수 없고 fly () 를 덮 는 방법 을 사용 할 수 있 기 때문이다.
계승 을 이용 하여 Duck 을 제공 하 는 행 위 는
1) 코드 는 여러 하위 클래스 에서 반복
2) 실행 할 때의 행동 은 쉽게 바 뀌 지 않 는 다
3) 확장 하기 어렵 고, 추가 행 위 는 거의 모든 파생 류 를 변화 시킨다.
인 터 페 이 스 를 이용 하여 fly 와 quack 을 실현 하면 C + + 에 있어 서 Fly 와 Quack 두 추상 류 를 정의 하고 fly 와 quack 이 필요 한 Duck 파생 류 에서 이 두 추상 류 를 계승 합 니 다.
그러나 이러한 파생 류 는 fly 와 quack 을 완전히 실현 해 야 한다. 두 추상 류 는 fly 와 quack 을 추상 화 하 는 것 일 뿐 코드 는 재 활용 할 수 없다.
 
2 문제 분석
계승 을 사용 하 는 것 은 문 제 를 잘 해결 하지 못 한다. 오리 의 행 위 는 자 류 에서 끊임없이 변화 하고 모든 자 류 가 이런 행 위 를 할 때 적절 하지 않다.
Fly 와 Quack 인터페이스 가 이 문 제 를 해결 한 것 같 습 니 다. fly 와 quack 의 오리 만 이 두 인 터 페 이 스 를 계승 할 수 있 습 니 다.그러나 자바 인 터 페 이 스 는 실현 코드 가 없 으 며, 계승 인 터 페 이 스 는 코드 재 활용 을 실현 할 수 없다.
디자인 원칙 1: 응용 에서 변화 가 필요 한 점 을 찾 아 독립 시 키 고 변화 가 필요 없 는 코드 와 섞 이지 않 는 다.
오리 의 행동 이 각각 다 르 기 때문에 행 위 를 추상 적 인 Duck 에서 분리 하여 Fly 와 Quack 기 류 를 실현 하고 서로 다른 fly 와 quack 류 를 파생 시킨다.
설계 원칙 2: 인터페이스 프로 그래 밍 을 위 한 것 이지 프로 그래 밍 을 위 한 것 이 아니다.
우 리 는 오리 의 행동 이 탄력 이 있 기 를 바란다. 즉, 오리 의 행동 이 동태 적 으로 바 뀔 수 있 기 를 바란다. 그러면 인터페이스 프로 그래 밍 이 필요 하 다.
인터페이스 프로 그래 밍 에 대한 정확 한 의 미 는 기본 프로 그래 밍 을 대상 으로 Duck 류 에 행위 기본 클래스 의 지침 대상 을 추가 하고 Duck 파생 류 에서 이 지침 을 통 해 구체 적 인 행 위 를 호출 하 는 것 입 니 다.

좋은 웹페이지 즐겨찾기