더블 챈스 함수
Double-chance function소프트웨어 엔지니어링에서 더블 챈스(double chance) 기능은 교차 플랫폼과 확장 가능한 개발에서 강력한 응용을 가진 소프트웨어 설계 패턴이다.
예
컴퓨터 그래픽스
다음 기능이 포함된 그래픽 API를 고려하십시오. DrawPoint
, DrawLine
그리고 DrawSquare
는 것을 쉽게 알 수 있다. DrawLine
에 의해서만 실행될 수 있다. DrawPoint
그리고 DrawSquare
에 대한 네 번의 호출을 통해 차례로 실행될 수 있다. DrawLine
. 이 API를 새로운 아키텍처에 포팅하는 경우 세 가지 기능을 기본적으로 구현( 구현하는 데 시간이 더 걸리지만 결과적으로 코드가 더 빨라질 수 있음)하거나 쓰기를 선택할 수 있음 DrawPoint
위에서 설명한 다른 사항들을 공통의 교차 플랫폼 코드를 사용하여 기본적으로 구현하고 구현한다. 이 접근방식의 중요한 예는 X11 그래픽 시스템으로, 매우 적은 수의 장치 의존적 원시 요소들을 제공함으로써 새로운 그래픽 하드웨어에 포팅될 수 있으며, 하드웨어 독립 계층에 더 높은 수준의 기능을 남겨둘 수 있다.[1][2]
더블 챈스 함수는 그러한 구현을 만드는 최적의 방법이며, 포트의 초안에 의해 공통의 "빠른 시장 출시, 느리게 실행" 버전을 사용할 수 있다. DrawPoint
반면, 이후 버전은 "시장 출시 기간 단축, 실행 시간 단축"으로 수정될 수 있다. 더블 챈스 패턴 점수가 높은 경우, 기본 API에는 null 드라이버의 일부로 제공된 자체 지원 구현이 포함되며, 다른 모든 구현은 이를 확장한 것이다. 결과적으로, 첫 번째 포트는 실제로 사용 가능한 첫 번째 구현이다.
C++의 대표적인 구현은 다음과 같다.
계급 CBaseGfxAPI { 가상의 공허하게 하다 드로포인트(인트로 x, 인트로 y) = 0; /* null 드라이버에 대한 추상 개념 */ 가상의 공허하게 하다 그리기선(인트로 x1, 인트로 y1, 인트로 x2, 인트로 y2) { /* DrawPoint() 반복 */} 가상의 공허하게 하다 그리기제곱(인트로 x1, 인트로 y1, 인트로 x2, 인트로 y2) { /* 그리기선() 반복 */} }; 계급 COriginalGfxAPI : 공중의 CBaseGfxAPI { 가상의 공허하게 하다 드로포인트(인트로 x, 인트로 y) { /* 필요한 유일한 네이티브 호출 */ } 가상의 공허하게 하다 그리기선(인트로 x1, 인트로 y1, 인트로 x2, 인트로 y2) { /* 이 기능이 있는 경우 기본 그리기선 루틴이 사용될 것이다. 그렇지 않으면 베이스 구현 실행. */} }; 계급 CNewGfxAPI : 공중의 CBaseGfxAPI { 가상의 공허하게 하다 드로포인트(인트로 x, 인트로 y) { /* 네이티브 호출에 필요한 유일한 */ } };
참고: CBaseGfxAPI::DrawPoint
어떤 그래픽 호출이 그것의 파생된 클래스들 중 하나를 거치기 때문에 함수는 절대로 사용되지 않는다. 그래서 에 대한 전화. CNewGfxAPI::DrawSquare
첫 번째 기회가 있을 겁니다 CNewGfxAPI
class. 기본 구현이 없는 경우 기본 클래스가 호출되며, 이 때 가상화는 다음을 대신한다. CNewGfxAPI::DrawLine
라고 불린다. 이것은 더 좋은 것이다. CNewGfxAPI
사용 가능한 경우 기본 코드를 사용할 "두 번째 기회"를 분류하십시오.
이 방법을 사용하면 이론적으로는 드로포인트 형태의 하나의 고유 기능만을 사용하여 전체 3D 엔진(소프트웨어 래스터화 적용)을 구축할 수 있으며, 다른 기능은 시간이 허락하는 대로, 그리고 시간에 따라 구현된다. 실제로 이것은 절망적일 정도로 느릴 수 있지만, 이중 챈스 기능의 가능성을 보여준다.
참조
- Goodwin, Steven (2005). Cross-Platform Game Programming. Charles River Media. ISBN 1-58450-379-3.