如何在已经存在但不能在java中修改的类周围创建接口

caf*_*00d 2 java oop class-design interface object-oriented-analysis

假设我的代码中已经有两个类:

class SomeOrder {
  String getOrderId() { return orderId; }
}

class AnotherOrder {
  String getOrderId() { return orderId; }
}
Run Code Online (Sandbox Code Playgroud)

如何围绕这两个类创建一个接口:

interface Order {
    String getOrderId();
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我将修改代码,以便SomOrder implements OrderAnotherOrder implements Order,但这里的前提条件是,他们在我无法控制或编辑一个包属于(即它们来自外部的jar).

我的算法目前看起来像这样:

void sorter(List<SomeOrder> orders) {
    ... <custom sort logic> ...
    someOrder.getOrderId();
}

void sorter(List<AnotherOrder> orders) {
    ... <custom sort logic> ...
    someOrder.getOrderId();
}
Run Code Online (Sandbox Code Playgroud)

使用单一界面我可以写:

void sorter(List<Order> orders) {
        ... <custom sort logic> ...
        order.getOrderId();
}
Run Code Online (Sandbox Code Playgroud)

Izr*_*ruo 7

您可以使用适配器类:

class SomeOrderAdapter implements Order {
    private SomeOrder delegate;

    @Override
    public String getOrderId() {
        return delegate.getOrderId();
    }
}
Run Code Online (Sandbox Code Playgroud)

和类似的AnotherOrder.