작은 게임 용 내 단위를 그려야하는 두 개의 클래스를 디자인하고 싶습니다. 나는 Unit
과 Settler
이 Unit
까지 확장되는 수업을 가지고 있습니다.상속 클래스 디자인 (Java)
그 (것)들을 그리기 위하여 나는 종류 UnitView
및 SettlerView
가있다.
이제 UnitView
은 public void draw(Graphics g)
과 SettlerView
같은 방법을 사용해야합니다. 두 클래스의 차이점은 유닛을 그리는 데 필요한 정보를 얻는 방법에 있어야합니다. Units
은 항상 파란색이며 Settlers
은 건강 상태에 따라 색상이 달라집니다 (에 액세스 할 수있는 Settler
의 필드가 됨).
구현 방법은 무엇입니까? setColor
과 같은 공개 방법이없는 깨끗한 디자인이 필요합니다.
편집 : 이것은 내 첫 번째 방법이었다
내가 UnitView.draw를 호출하는 다형성을 사용하려면public class UnitView {
private Unit unit;
public Color color; // I don't want to make it public. Setting it private + getter/setter does not seem to be different to me.
private color calculateColor() { ...uses the information of unit... }
public void draw(Graphics g) { ...something using the Color... }
}
public class SettlerView extends UnitView {
private Settler settler;
private color calculateColor() { ...this method overides the one of UnitView.... }
}
. 중요한 것은 Public 필드 Color입니다.
멤버 변수에 대한 접근 자 및 변경자는 캡슐화의 핵심이며 깨끗한 디자인의 일부입니다. 당신은 그들을 피하려고 노력해서는 안됩니다. – Borgleader
Draw() 메서드가 포함 된 인터페이스 IView를 만들고 UnitView 및 SettlerView에서 IView를 구현합니다. *보기를 사용하는 곳이면 어디에서나 IView 인터페이스를 사용하십시오. 인터페이스는 필드를 가질 수 없으므로 접근 자 메소드 getColor()를 작성하여 IView 인터페이스에 추가해야합니다. – ryan0