首页 > 解决方案 > 在 Java 中,您如何称呼这种模式/习语?

问题描述

我的 Java 库提供了一个SomethingClient带有一个实现类的接口SomethingClientImpl。正如您所期望的那样,该接口包含将由应用程序调用的方法。

但是有一个“镜像”接口SomethingHandler,其中包含应用程序提供的方法 - 应用程序回调。您可以想象应用程序向库提供了此接口的一个对象 - 可能是从中获取的 Factory 方法SomethingClient

作为一个没有经验的 Java 设计者,我很想知道是否有一个名称,以及是否/在多大程度上被推荐,以提供一个结合了这两个概念的接口和类:

public interface SomethingClient { /*..*/ }

public interface SomethingHandler { /*..*/ }

public interface ClientAndHandler extends SomethingClient, 
                                          SomethingHandler { }

public abstract class ClientAndHandler_Impl implements ClientAndHandler {

    final SomethingClient clientImpl_;

    ClientAndHandler_Impl(SomethingClient clientImpl) {
        this.clientImpl_ = clientImpl;
    }

    // TODO now all SomethingClient methods are implemented in terms of clientImpl_
    // AND, SomethingHandler methods are left abstract so they are implemented by the application
}

目的是,应用程序编写者可能更喜欢从ClientAndHandler_Impl抽象类扩展并实现回调方法,可能是在客户端(传出)方法方面。这可以相对容易地完成。假设你会这样做,你会给这个ClientAndHandler概念起什么名字?

标签: javaoopdesign-patternsinterface

解决方案


骨架实现

您当前的代码看起来有点像骨架实现。您可以在马萨诸塞理工学院或dzon上阅读有关它的更多信息。

它背后的想法是为客户端提供默认实现。您可以在 Java-Collections-API 中找到一些示例,例如AbstractCollection,AbstractSetAbstractMap.

一些建议

冗余接口

接口ClientAndHandler是多余的。该类ClientAndHandler_Impl应实现SomethingClientand SomethingHandler

命名

我会将抽象类命名为ClientAndHandler_ImplAbstractClientInteraction或者ClientInteractionSkeleton如果您想明确说明您使用的是骨架实现。


推荐阅读