1.3 디자인
여기에서는 렌즈의 종류는 기종별로 하나의 렌즈만 제공하는 수준으로 디자인하려고 합니다. 여기에서 보여 드리고자 하는 프로그램에는 카메라, 렌즈, 특정 기종의 카메라와 렌즈를 생성하는 역할을 하는 팩토리, 테스터로 분류할 것입니다.
카메라와 렌즈, 팩토리는 Everyday에 관련된 것과 Holiday에 관련된 구체화 클래스와 일반화된 추상 클래스 구조로 만들어야겠지요. 여기에서 Everyday에 관련된 것들은 접두사 Ev를 사용하고 Holiday에 관련된 것들은 접두사 Ho를 사용할 것입니다.
카메라에는 렌즈를 장착 및 탈착하는 기능과 사진을 찍는 기능에 대해 약속합시다. 렌즈에는 상을 얻어오는 기능을 약속하겠습니다. 그리고 카메라와 렌즈를 기반으로 파생한 형식에서는 약속된 기능에 대해 구체적으로 구현을 제공해야 합니다. Ev 렌즈는 쉽게 초점을 맞출 수 있는 기능을 제공하고 있어서 Ev 카메라로 셔터를 누르면 자동으로 초점을 맞춘 후에 사진을 찍을 수 있게 합시다. Ho 렌즈는 수동으로 초점을 맞출 수 있는 기능을 제공합시다. Ho 카메라는 수동으로 초점을 맞추고 사진을 찍는 것으로 구현하면 되겠죠.
테스터에서는 직접 카메라와 렌즈 개체를 생성하였을 때 이들 사이에 호환성이 유지되지 않음을 보여줍시다. 그리고 하나의 팩토리 개체를 통해 생성되는 카메라와 렌즈 개체는 호환성이 유지됨을 보여줄게요. 그리고 Ev 카메라에 Ev 렌즈를 장착하여 사진을 찍고 Ho 카메라와 Ho 렌즈를 장착하여 사진을 찍는 테스트해 봅시다.