4. 원형 패턴(Prototype Pattern) 구현

4. 4 구현

이제 원형 패턴에 대한 예제 프로그램을 구현해 봅시다. 구현 순서는 줌 렌즈, 줌 렌즈 생산 라인, 렌즈 공장과 테스트 코드 순서로 구현할게요.

 

4.4.1 줌 렌즈

여기에서는 원형 패턴을 사용할 것이므로 다양한 줌 렌즈를 일반화 관계를 사용하지 않고 하나의 ZoomLens 클래스에서 속성만 다르게 주고 자신을 복사하는 메서드를 제공하기로 할게요. 이에 줌 렌즈의 생성자에서는 줌 레벨의 최소값과 최대값, 초점 거리의 최소값과 최대값을 인자로 전달받아 생성하도록 할게요. 원형 패턴을 사용하지 않고 일반화 관계를 사용한다면 많으 수의 파생 클래스가 필요할 것입니다.

C#에서는 이와 같이 자신을 복제 가능한 형식들을 위해 IConeable 인터페이스가 정의되어 있습니다. 여기에서도 ZoomLens는 ICloneable 인터페이스를 기반으로 정의할게요. 그리고 줌 인, 줌 아웃, 초점을 가까운 곳으로 이동, 먼 곳으로 이동시키는 기능과 피사체를 사진으로 변환하는 기능을 추가합시다.

▶ZoomLens.cs


4.4.2
줌 렌즈 생산 라인

생산 설비는 하나의 줌 렌즈를 모형으로 갖고 있고 이를 기반으로 복사된 렌즈를 생산하기로 하였습니다. 이를 위해 생산 설비의 생성자는 어떠한 모형 렌즈를 갖고 있을 것인지를 입력 인자로 전달받기로 하겠습니다. 그리고 렌즈 생산 요청을 받아 복제된 제품을 생산하는 메서드를 MakeLens라 하겠습니다.

▶ProLine.cs


4.4.3
렌즈 공장과 테스트 코드 

렌즈 공장에서는 여러 종류의 생산 설비들로 구성되어 있고 클라이언트로부터 렌즈를 만들어 제공하는 메서드가 필요하겠죠.

▶LensFactory.cs

 테스트 코드에서는 공장을 통해 여러 종류의 렌즈 정보를 확인하는 것으로 하겠습니다. 

▶Program.cs

▶실행 결과