2011-12-26 2 views
0

6 개월 전, 나는 ThoughtWorks 인터뷰를했고 코딩 라운드에 나갔다. OO 디자인 기술을 향상시키고 싶습니다.디자인 패턴을 사용하여 가장 저렴한 Hotel Finder를 구현하는 방법은 무엇입니까?

헤드 우선 디자인 패턴을 읽고 일반적인 디자인 패턴에 대한 기본적인 아이디어를 얻었습니다. 그리고 현재 iOS에서 일하는 동안 나는 Objective C를 배우고 있으며 동적 언어를 통해 적용되고 다양한 것들을 이해하는 다양한 디자인 패턴을 접하게되었습니다.

그러나이 샘플 문제에 사용 된 패턴의 적절한 선택이 무엇인지 계속 알고 싶습니다.

과 같은 기술을 향상시키는 방법에 대한 정보가 될 수 있습니다.

여기에 문제가 있습니다.

호텔 체인이 있습니다. LakeWood, Rosewood 및 xyzWood의 세 가지가 있습니다. 및 그 모두가 평일, 주말 및 고객이 보상인지 정기적인지 여부에 따라 조합에 따라 4 가지 요금 유형이 있습니다.

사용자 입력은 호텔 및 그의 유형 중 하나에 숙박하기를 원하는 일련의 날짜입니다. 출력은 체류 기간 중 가장 저렴한 호텔에 따라 가장 좋은 호텔이어야합니다. 동점 인 경우 각 호텔에 등급이 부여되며 등급이 더 높은 등급은 동점을 결정합니다. 및 프로그램은 새로운 알고리즘을 사용하여 최고의 호텔을 찾고 호텔의 구조가 변경되면 더 많은 호텔이 추가 될 수 있도록 유연해야합니다.

나는 자바의 관점에서 다음과 같은 수업을했다.

  • 호텔 : 등급, 이름, 및 요금의 4 가지 유형을 가진 호텔을 반환하는 파인더 메소드를 가지고
  • HotelFinder 인터페이스.
  • 이 인터페이스를 구현하고 고객 또는 고객 유형과 같은 속성을 가진 CheapestHotelFinder 클래스는 열거 형 [확실하지 않음] 및 날짜 목록 일 수 있습니다.
  • 아마도 고객 세부 정보가 날짜 유형이고이 고객이 파인더에 제공되는 고객 클래스 일 수 있습니다.
  • 비교할 수있는 인터페이스를 호텔 클래스에 사용할 수있는 방법이 있습니까?
  • 및 우리를 위해 모든 작업을 수행하는 예약 시스템 싱글 톤 클래스.

여기에 붙어 있습니다. 누구든지 디자인을 도와 주길 바랍니다.

+0

Thoughworks는 '책'에 의해 OO 설계가 필요합니까? : -O –

+0

잘 모르겠지만 ... 일반적으로 어떻게 당신이 그것을 abt 갈 것입니까? –

+2

나는 아인슈타인의 법칙을 따르는 경향이있다 : "가능한 한 간단하게, 그러나 더 간단하게 만들지 마라." 너의 수업 세트는 괜찮아 보인다. 실제로 구현하려고 했습니까? –

답변

1

@root는 전략 (http://en.wikipedia.org/wiki/Strategy_pattern)을 선택했기 때문에 "이 프로그램은 새로운 알고리즘을 사용하여 최고의 호텔을 찾을 수 있어야합니다"라는 문구 때문에.

호텔마다 각기 다른 평가 방법이있을 수 있으므로 전략은 각 호텔을 평가하는 다양한 방법이있는 방법 일 수 있습니다.

이 방법은 데이터 (호텔 빈)와 평가 알고리즘을 분리합니다 (또는 "기능 벡터 함수"라고도 부를 수 있습니까?).

0

나는 템플릿 패턴 패턴이 더 적합하다고 생각합니다. 1. 호텔 인터페이스 생성 2.3 개 호텔 클래스를 생성 (호텔 인터페이스를 구현) 레이크 우드, 로즈 우드와 xyzWood

  1. 이제 고객 클래스를 생성하고 또한 날짜의 일련있을 것이다.

    여기서 고객 클래스와 호텔 클래스는 모두 독립적입니다.

  2. 이제는 메소드가있는 LogicInterface 인터페이스를 만들고이 메서드는 매개 변수로 고객과 List 호텔에 전달되어 가장 저렴한 호텔로 돌아갑니다. 이제 LogicInterface.cheap 호텔 찾기 로직을 ​​구현하는 클래스를 만듭니다. 이 클래스에 여기 템플릿 패턴 패턴이 사용됩니다. 나중에 가장 저렴한 호텔 찾기 로직이 변경되어 새로운 클래스가 생성됩니다. LogicInterface 을 구현하면 단 한 줄만 변경하면 작업이 완료되며 코드를 변경해야하는 곳은 없습니다.

관련 문제