Java中的扩展接口模式需要引用

Java中的扩展接口模式需要引用,java,design-patterns,Java,Design Patterns,下面的Java设计允许在不更改对象与客户端的接口的情况下扩展对象。该对象可以实现额外的扩展接口。客户端可以向对象请求它实现的扩展接口。我在一篇博文中读到了这篇文章,但我的谷歌技能再次未能找到这篇博文。我不是在提倡这种设计的优点。我只是想找到这篇博文 例如,想象一个运输车辆的域模型。每个车辆对象都实现此接口: public interface Extendable { /** * Asks the object if it provides the extension.

下面的Java设计允许在不更改对象与客户端的接口的情况下扩展对象。该对象可以实现额外的扩展接口。客户端可以向对象请求它实现的扩展接口。我在一篇博文中读到了这篇文章,但我的谷歌技能再次未能找到这篇博文。我不是在提倡这种设计的优点。我只是想找到这篇博文

例如,想象一个运输车辆的域模型。每个车辆对象都实现此接口:

public interface Extendable {

    /**
     * Asks the object if it provides the extension.
     * 
     * @param extensionInterface
     *            requested extension
     * @return object implementing the requested extension, or {@code null} if
     *         not available.
     */
    <T> T queryExtension(Class<T> extensionInterface);
}
固定翼飞机类别提供了
控制面
扩展:

public class FixedWingAircraft extends Vehicle {

    @SuppressWarnings("unchecked")
    public <T> T queryExtension(Class<T> extensionInterface) {
        if (ControlSurfaces.class.equals(extensionInterface)) {
            return (T) new ControlSurfacesImpl();
        }
        return null;
    }
}

你是说?对不起,你的问题让人困惑。我看不出提出贫血域模型有什么帮助。

这是一个“扩展接口”模式的Java实例,如施密特、斯达尔、罗内特和巴斯曼、威利2000年在《面向模式的软件体系结构》第2卷(POSA-2)中所述。

我提到贫血域模型是为了这个例子。车辆类别是贫血的,因为它不知道如何保持自身。一个单独的服务类实现持久性功能。因此,服务类必须知道需要持久化的车辆类的所有扩展。贫血区域模型与扩展界面模式无关。
public class FixedWingAircraft extends Vehicle {

    @SuppressWarnings("unchecked")
    public <T> T queryExtension(Class<T> extensionInterface) {
        if (ControlSurfaces.class.equals(extensionInterface)) {
            return (T) new ControlSurfacesImpl();
        }
        return null;
    }
}
public class VehicleServiceImpl {

    private VehicleDao vehicleDao;
    private ControlSurfacesDao controlSurfacesDao;

    public void save(Vehicle vehicle) {
        vehicleDao.save(vehicle);

        ControlSurfaces controlSurfaces = vehicle.queryExtension(ControlSurfaces.class);
        if (controlSurfaces != null) {
            controlSurfacesDao.save(vehicle, controlSurfaces);
        }
    }
}