저는 같은 카테고리에 속하는 다양한 Device들의 인터페이스를 일반화 하고 생성 함수를 만들어서 클라이언트 코드가 특정 구현객체에 의존하지 않을 수 있도록 하기 위해 Factory Pattern을 사용합니다. 주로 사용성은 아래와 같습니다.

 

   1:  //Radiometer 카테고리의 디바이스.
   2:   
   3:  DevRadiometer* radiometer = DevRadiometerCreator::Instance().Create( “K6485” );
   4:   
   5:  DevRadiometer* radiometerEmul = DevRadiometerCreator:Instance().Create( “emulator” );
   6:   
   7:   
   8:   
   9:  //Thermometer 카테고리의 디바이스.
  10:   
  11:  DevThermometer* thermometer = DevThermometerCreator::Instance().Create( “pk2000” );
  12:   
  13:  DevThermometer* themometerEmul = DevThermometerCreator::Instance().Create( “emulator” );
  14:   

  위와 같이 Device 종류 별로 Factory 클래스를 만들어서 사용을 해 왔었는데요. 각각의 Factory 클래스 마다 반환하는 특정 클래스를 제외하면 구현 내용은 중복이 되었습니다. 이러한 중복을 제거하기 위해서 Template을 사용하여 Factory 자체를 일반화 하는 것을 구상해 보았습니다. 사용성은 아래와 같습니다.

   1:  DevRadiometer* radiometer = Factory<DevRadiometer>::Instance().Create( “K6480” );
   2:   
   3:  DevRadiometer* radiometerEmul = Factory<DevRadiometer>::Instance().Create( “emulator” );
   4:   
   5:   
   6:   
   7:  DevThermometer* thermometer = Factory<DevThermometer>::Instance().Create( “pk2000” );
   8:   
   9:  DevThermometer* thermometerEmul = Factory<DevThermometer>::Instance().Create( “emulator” );
  10:   
  위와 같이 Factory Template 클래스를 한번 구현해 놓으니 수정이나 기타 구현이 필요 없이 재사용이 가능한 것 같습니다. 구현 코드는 파일로 첨부 하였습니다.

Posted by 웹눈