如何使用接口通信两个组件?

时间:2015-04-21 21:49:08

标签: java interface

我正在开发一个基于组件的软件,我有两个相互通信的组件。我有一个用于管理预订流程的预订组件和一个用于管理度假村详细信息的度假村组件(可用房间,房间详情,客户等)。 预订组件具有 IReservation 界面,度假村组件具有 IResort 界面。接口如下所示。

IReservation

public interface IReservation{

    void makeReservation(Client c);
    RoomDetails getRoomDetails(int roomNumber);
}

IResort

public interface IResort{

    RoomDetails getRoomDetails(int roomNumber);
}

请注意,两个接口都使用相同的方法getRoomDetails

我希望当预订组件需要获取房间详细信息时, IReservation 界面会将呼叫传递给度假村组件 IResort 界面,因此度假村组件可以执行de getRoomDetails 并将房间详细信息返回到预订组件 IReservation 界面。  那么如何让预订组件将呼叫传递给度假村组件并从中获取房间详细信息?

2 个答案:

答案 0 :(得分:0)

接口无法将调用传递给另一个接口 - 只有具体实现才能执行此操作。

创建Reservation组件(实现IReservation)时,在构造函数中或通过setter方法向Resort组件(实现IResort)传递引用。

然后只需在预订组件中调用IResort组件的.getRoomDetails()方法,当需要房间详细信息时。

(假设您确实需要IReservation和IResort的单独组件,并且您希望按照描述保留这两个接口;例如,您可以实现具有相同类的两个接口,或者创建一个按照Krab的评论中所述保持getRoomDetails的新界面

答案 1 :(得分:0)

如果您愿意放弃必须都是Interfaces的条件,您可以通过将IReservation声明为抽象类来强制执行您的条件:

// implements is not necessarily needed, but here it does fit since each
// Reservation is bound to an IResort
public abstract class AReservation implements IResort {

    IResort resort;

    public AReservation(IResort resort) {
        this.resort = resort;
    }

    abstract public void makeReservation(Client c);

    // forward getRoomDetails to resort's getRoomDetail,
    // make method final to prevent overriding.
    public final RoomDetails getRoomDetails(int roomNumber) {
        return this.resort.getRoomDetails(roomNumber);
    }
}

public interface IResort {

    public RoomDetails getRoomDetails(int roomNumber);
}