Java 如何使用接口与两个组件通信?
我正在开发一个基于组件的软件,我有两个相互通信的组件。我有一个预订组件来管理预订流程,还有一个度假村组件来管理度假村详细信息(可用房间、房间详细信息、客户等)。预订组件有一个IReservation界面,度假组件有一个IResort界面。界面如下所示 i观察Java 如何使用接口与两个组件通信?,java,interface,Java,Interface,我正在开发一个基于组件的软件,我有两个相互通信的组件。我有一个预订组件来管理预订流程,还有一个度假村组件来管理度假村详细信息(可用房间、房间详细信息、客户等)。预订组件有一个IReservation界面,度假组件有一个IResort界面。界面如下所示 i观察 public interface IReservation{ void makeReservation(Client c); RoomDetails getRoomDetails(int roomNumber); } I
public interface IReservation{
void makeReservation(Client c);
RoomDetails getRoomDetails(int roomNumber);
}
IResort
public interface IResort{
RoomDetails getRoomDetails(int roomNumber);
}
请注意,两个接口都有相同的方法getRoomDetails
我希望当预订组件需要获取房间详细信息时,IReservation接口通过IResort接口将调用传递给度假组件,因此,度假组件可以执行degetRoomDetails,并通过IReservation界面将房间详细信息返回到预订组件。
那么,我如何才能让预订组件将调用传递给度假组件,并从中获取房间详细信息呢?一个接口不能将调用传递给另一个接口-只有具体的实现才能做到这一点 创建预订组件(实现
IReservation
)时,在构造函数中或通过setter方法向其传递对度假组件(实现IResort
)的引用
然后,当预订组件需要房间详细信息时,只需调用IResort
组件的.getRoomDetails()
方法
(这是假设您确实希望IReservation和IResort使用单独的组件,并且您希望按照所述保留这两个接口;例如,您可以使用相同的类实现这两个接口,或者创建一个新接口来保存
getRoomDetails
,如Krab在评论中所述)如果您愿意放弃两者都必须是接口的条件,您可以通过将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);
}
解决方案是否需要是接口?否则,您可以将
IReservation
定义为抽象类,并为其指定类型为IResort
的属性和最终方法getRoomDetails(int)
,它只是将调用转发到IResort
属性。我将使用getRoomDetails
添加新的接口IRoomInfo
,并让IReservation
和IResort
扩展它IReservation
实现将推动调用IRoomInfo.getRoomDetail
IResort.getRoomDetails