2012-09-14 4 views
0

클래스에있는 일련의 함수가 있습니다. 이 기능은 가장 낮은 공통점 집합입니다.내 추상화를 구성하는 방법?

이 정보를 실행할 수 있으려면 특정 정보를 생성해야하지만이 정보는 두 경로 중 하나에서 내 수업에 도착할 수 있습니다.

public class onHoliday(){ 

    private Object modeOfTravel; 
    private Object location; 

    public onHoliday(Object vehicle, Location GPScoords) { 
    } 
    private boolean haveFun() { 
     //function to have fun, needs 4 people 
    } 
} 

가 나도 차 또는으로 내 휴가를 얻을 수 있습니다 상상할 수 있습니다 :

내 상황을 요약하려고합니다

....

다음과 같이 I 클래스가 있다고 가정하자 자전거.

haveFun() 기능은 차량의 종류에 따라 다릅니다.

그러나 느슨하게. 내 차량 유형을 결정하고 필요한 값을 추출하는 또 다른 기능이 있습니다. 예를 들어 내가 차를 보내면 나는 한 번에 사명을 구할 수 있지만 내가 자전거를 보내는 경우 내가 필요한 4

내가 현재 두 가지 옵션이 얻을 적어도 2가 필요합니다

  1. 과부하를 내 생성자, 그래서 내가 두 개의 자전거 또는 하나의 자동차를 보낼 수로, 그 중 하나를 호출 할 수 있습니다 2 중간 함수 (예를 들어 내 4 명의 사람들의 이름을 얻으려면 전에) 내가 haveFun() - 이것은 내가 현재하고있는 것입니다 .

  2. 두 개의 생성자를 두 개의 개별 클래스로 분할하고 제 두 번째 클래스의 객체가되는 세 번째 클래스에서 haveFun()을 반복합니다. 내 문제는 내 중간 기능은 몇 줄의 코드를 제외하고는 모두 별개의 파일에 넣고 싶지 않다는 것입니다. (난 항상 별도의 파일에 클래스를 넣어!)

주의 사항, 내 haveFun() 나는이 두 클래스의 외부 필요할 것, 또는 onHoliday되는거야 일이 아니다 (즉. 기회가 없다 주말이나 저녁에 haveFun() 일을하는 중!).

나는 인터페이스에 haveFun()을 넣는 것에 대해 가지고 있지만, 단 하나의 방법으로 인터페이스를 갖는 것은 쓸모없는 것처럼 보입니다! 그럼에도 불구하고 나는 자전거와 자동차를위한 두 가지 수업 모두에서이 방법을 사용해야합니다.

나는 내 onHoliday 클래스가 어떤 객체 유형을 받아들이는 것에 대해 생각해 보았지만 실수로 배를 내 onHoliday 클래스 (우연히 나는 수영 할 수 없다고 상상해보십시오)로 보내지 않게하고 싶습니다.

onHoliday 클래스는 개인 패키지이며 최종적인 것입니다. 사실 다른 클래스의 다른 'private 메소드'를 통해서만 액세스 할 수 있으며 private 메소드 만 있습니다.

EDIT1 :

난 확실히 누군가가 내가 onHoliday() 클래스에 데이터를 전송하는 클래스에서이 문제를 처리 할 것을 제안합니다. 그러나이 클래스 (travel()이라고 부름)는 내가 사용하고있는 차량의 whay 타입에 관심을 가질 이유가 없다. 내가 그렇게하면 신경을 써서 문제를 나무 위로 다른 장소로 옮긴다.이제는 중급 클래스의 모든 클래스를 자동차 또는 자전거에 액세스하도록 다시 작성해야합니다. 즉, 단순히 차량 오브젝트를 받아들이는 순간, 자전거 또는 자동차인지를 결정하는 부울 스위치가 있습니다.

EDIT2 : 난 그냥 했어

다른 후, 내 재미를 실행 내 자전거 또는 자동차 클래스 중 하나에 '내부 클래스'로 구현하기위한 추상 클래스를 가진 약하지만. 그런 다음 내 자전거 또는 교실 멤버에게 액세스 할 수 있습니다. 이것도 이해가 되니?

참고 : 필자는 적어도 onHoliday() 클래스에서 적어도 4 명 이상을 확보해야한다고 언급해야합니다. 그것을 생각하는

어쩌면 또 다른 방법은 ...입니다

I 멀티 페이지 파일을 얻을, 나는 페이지 번호의 통과 목록에서 원하는 페이지를 추출 할 수 있습니다. 또는 여러 파일 목록을 가져올 수 있습니다.

첫 번째 경우 단일 파일 개체를 보내고 두 번째 페이지 번호 을 선택하면 여러 파일 개체 (미리 관심이있는 개체 선택)가 전송됩니다. 아마도 더 나은 설명

+1

FWIW, 단일 방법으로 인터페이스를 갖는 것은 절대적으로 가치가 없습니다. 사실, 때로는 더 좋은 아이디어입니다. – gobernador

답변

1

귀하의 코드 샘플이 많은 컴파일 문제가있다,하지만 난 당신이 요구하는지 알 것입니다 사실

. 추상 클래스 Vehicle을 사용하는 경우 구체 클래스에 haveFun()을 구현할 수 있습니다 (예 : Bike, Car) 휴일 클래스 생성자는 Vehicle 매개 변수를 사용할 수 있습니다. 어떤 유형의 차량인지에 관계없이 구현은 휴일이 아닌 차량의 일부

재미와 차량 사이의 느슨한 커플 링이라고 말했습니까? 차량에 haveFun을 구현하는 것이 이해가되지 않는다면, 휴일을 결정하는 방법이 있습니다. 이 방법은 비록 당신이 차량의 각 유형을 확인해야 할 것입니다 (예 : if vehicle instanceof Bike then... else if....)

만약 당신이 라떼 r, 당신은 컨스트럭터의 어떤 것도 할 수 없습니다. 당신은 add '의 사람과 차량을 말하는 방법을 원할 것입니다 ... addPerson(Vehicle). 그런 다음 isFun()을 모두 실행하면됩니다.

+0

작업 해 주셔서 감사합니다. 귀하가 완벽하게 이해했다고 생각합니다 (+1). 나는 당신의 아이디어가 마음에 들지만, 정보를 클래스의 한 섹션에 올려 놓으면 트리가 더 많은 클래스를 갖게된다. (아마도 상속받을 추상 클래스를 얻을 수는 있지만). – DaveM

0

사람들이 움직이는 것을 처리하는 Vehicle 클래스를 만들 수도 있습니다. 당신이 CarBike 다르게 할 (하지만 그들은 모두 할 것) 것이 어떤 일들이있는 경우

public abstract class Vehicle { 

    public void travel(Location location) {} 

    public abstract int getCapacity(); 

    //etc. 
} 

public class Bicycle extends Vehicle { 

    @Override 
    public int getCapacity() { return 2; } 

} 

public class Car extends Vehicle { 

    @Override 
    public int getCapacity() { return 4; } 

} 

final class onHoliday { 

    private Vehicle vehicle; 

    public onHoliday(Vehicle vehicle) { 
     this.vehicle = vehicle; 
     haveFun(); 
    } 
} 

다음, 바로 Vehicle 클래스와 재정에서 해당 추상적했습니다.

+0

@gobernadro 저는이 아이디어가 마음에 들지만, 저는 자전거와 자동차 수업이 하나의 방법을 넘어서는 것을 예견합니다. 그것은 가치가있는 것보다 거의 더 번거롭게 보입니다. 내 편집도 봐. – DaveM

관련 문제