6. 조건부 컴파일
조건부 컴파일로 어느 정도 해결.
지원 객체와 플랫폼이 늘어나면 관리 이슈 발생함.
OOP적 해결방식은?
7. 플랫폼별 상속
각 객체를 상속받은 Draw() 메소드에서 플랫폼별로 드로
잉 작업을 수행한다.
Rect Text
WinRect WinText
MacRect MacText
void MacRect::Draw(Painter* pPainter) { void WinRect::Draw(Painter* pPainter)
CGContextRef context = pPainter->Context(); {
CGContextAddRect(context, rect); CDC* pDC = pPainter->Context();
CGContextStrokePath(context); pDC->DrawRect(...);
} }
8. 각 플랫폼별 상속 장단점
플랫폼별 하위 클래스를 생성해야 한다.
객체 또는 플랫폼이 늘어나는 경우 대처가 힘들다.
파일 단위로 구분한 경우 파일 관리가 힘들 수 있다.
파일 단위 구분은 작업 단위가 명확할 수 있는 장점.
Abstract Factory 패턴과 연동.
15. 비지터 패턴
이해가 어렵다.
컴포지트 순회 방식과 뷰의 의존도를 끊을 수 있다.
컴포지트 패턴과 무관하게 추가 작업을 할 수 있다.
(드로잉 우선순위 조절)
하위 형변환을 직접적으로 하지 않는다.
16. 컴포지트 패턴
컴포지트 패턴은 객체를 합성하여 동일한 메소드를 호
출할 수 있는 매력적인 장점을 가진다.
그러나, 상위 타입으로 객체를 저장하므로서 실행시점
의 하위타입을 찾기 위한 어려운 문제점에 봉착한다.
따라서,
객체 합성의 개수 제한이 없고,
객체 합성의 명확한 이점이 있을 경우에만 사용하는 것
이 좋다.