이제 다형성을 구현 한 것을 어떻게“구축해야합니까? (Java, SIM 게임)

StackOverflow https://stackoverflow.com/questions/1219943

문제

저는 1995 년 게임 테마 병원의 일종의 복제품 인 작은 Java 게임을하고 있습니다. 나는 최근에 GUI와 레벨 구조를 연구 해 왔으며 이제 경로 찾기와 그리드가 작동합니다. 현재 "물건을 건축"하는 방법은 한 방과 리셉션 데스크로 구성되어 있으며 지금까지는 잘 작동하지만 다양한 유형의 객실과 품목을 추가하는 방법을 구현해야합니다. 다음은 객체 생성을위한 버튼 누름의 현재 코드입니다.http://snipt.org/lum).

더 나은 방법이 있어야한다고 확신합니다! 내 구현은 열악하지만 최근에만 추상 클래스와 인터페이스를 사용하는 방법을 이해하기 시작했습니다.

실제로 방이나 품목의 속성을 설정하면 현재 문제가 없습니다. 나는 앞서 생각하고 있지만 스택에서 일을하는 가장 좋은 방법에 대해 다른 의견을 얻는 방법을 좋아합니다. 그러한 일을 어떻게 달성 해야하는지에 대한 아이디어에서? 이런 종류의 예가 있습니까? 나는 그것을 검색 할 것이지만, 내가하고있는 일이 정확한 이름을 가지고 있지 않기 때문에 무엇을 검색 해야할지 잘 모르겠습니다.

내가 말하는 것을 정확히 명확하게하지 않았다면 미안합니다. 이에 대한 추가 질문에 기꺼이 답변하거나 필요하거나 요청에 따라 더 많은 코드 섹션을 업로드하겠습니다.

시간과 생각에 미리 감사드립니다!

도움이 되었습니까?

해결책

확인하십시오 공장 패턴. 공장은 매개 변수를 제공하고 공통 인터페이스를 준수하는 객체를 다시 가져 와서 객체를 만드는 수단입니다. 그러나 구현은 공장에 의해 결정됩니다. 호출 코드는 이것을 알 필요가 없습니다.

다른 객체 (공장)에서 객체 구성을 캡슐화함으로써 빌드 할 특정 객체를 선택하는 메커니즘은 호출 코드에서 멀리 떨어져 있습니다. 공장 자체 만 수정하여 나중에 추가 서브 클래스를 쉽게 제공 할 수 있습니다.

따라서 예제 코드에서 buildMe() 방법은 공장의 형태입니다. 구축해야 할 사항을 지정하는 일부 매개 변수가 필요합니다. Room 또는 a ReceptionDesk. 이 두 가지 모두 동일한 인터페이스를 구현할 것입니다 (a HospitalComponent그런 다음 호출 코드는 해당 구성 요소를 병원 내에 배치합니다. 병원 구성 요소의 서브 클래스를 공장에 추가 할 수 있습니다 ( OperatingTheatre?) 그리고 호출 코드는 변경 될 필요가 없습니다.

조사 할 가치가 있습니다 디자인 패턴 (이 시나리오 에서이 목록을 확인하십시오. 창조적 패턴) 일반적인 문제를 해결하기 위해 객체를 사용하는 다양한 방법을 이해하고 다른 사람들과 솔루션을 전달하는 방법을 이해합니다. 그만큼 갱단 책은이 주제의 성경입니다.

다른 팁

다형성은 당신이하고있는 일에 대해 과잉 일 수 있습니다.

개인적으로, 나는 단지 각 건물에 대한 값 테이블 (최대 크기, 타일 당 비용 등)이있는 룸 클래스를 가질 것입니다. 그런 다음 새 방을 만들 때 일치하는 테이블 항목을 가져 와서 테이블의 세부 사항으로 방 개체를 만듭니다.

이것은 모범 사례가 아닐 수도 있고 아마도 Java 컨벤션 (동적 언어에서 Java에 왔음)에 위배 될 것입니다. 그러나 새로운 방을 만들기 위해 변경 해야하는 코드 라인의 관점에서, 내가 찾은 가장 낮은 것입니다.

당신이 지금 가지고있는 것은 정적 기능이 많은 한 클래스입니다. 그것은 그다지 OOP가 아닙니다. 클래스는 모든 기능을 하나의 파일로 그룹화하는 방법 일뿐입니다.

OOP 루트를 가면 룸베이스 클래스, 운영실, ReceptionistDesk, 욕실, 사무실 (직원), Mriroom, 대기실 및 홀이 어린이 수업이 될 것입니다.

public class Room {
    protected int width, length;  //how many squares wide/long the room is

    protected int x, y;  //where it is on the gride

    protected float buildingProgress;  //how far construction has come

    protected bool isReady;  //is the building ready for use?

    protected Person occupants[];  //some list/array of people currently in the room

    protected Person resident;  //the person 'in charge' in the room--the receptionist, manager, MRI technician, etc etc.
}

나는 다형성 으로이 문제를 모델링하기 전에 신중하게 생각합니다.

문제는 다음과 같습니다. 기본적으로 다른 행동은 각 유형의 방이 전시됩니까? 그들 모두 사이에서 공통적 인 것은 무엇입니까?

다형성이 항상 대답은 아닙니다. 구성은 때때로 물건을 더 유연하게 유지할 수 있습니다. 앞에서 권장했듯이 데이터 중심 솔루션은 무엇보다도 가장 좋을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top