在Java中,您如何称呼此模式/习惯用语?

时间:2019-02-07 21:25:24

标签: java oop design-patterns interface

我的Java库提供了一个实现类SomethingClient的接口SomethingClientImpl。界面包含您期望的应用程序将调用的方法。

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

作为一个没有经验的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 这个概念起什么名字?

2 个答案:

答案 0 :(得分:1)

骨骼实施

您当前的代码看起来有点像骨架实现。您可以在massachusetts institute of technologydzon上阅读有关它的更多信息。

其背后的想法是为客户端提供默认的实现。您可以在Java集合API中找到一些示例,例如AbstractCollectionAbstractSetAbstractMap

一些建议

冗余接口

接口ClientAndHandler是冗余的。类ClientAndHandler_Impl应该实现SomethingClientSomethingHandler

命名

如果要明确使用骨架实现,我可以将抽象类ClientAndHandler_Impl命名为AbstractClientInteractionClientInteractionSkeleton

答案 1 :(得分:0)

首先,这不是设计模式。它确实包含一个直通字符:delegation pattern

对于组合接口,我可以称其为“复合marker interface”之类的东西。我不知道有任何可接受的名称。

这是不好的,原因有两个。首先,我的类可以分别实现A和B,但是如果不实现AAndB,那么它将不匹配那些方法的类型。因此,一般类型的交集是更可取的。

第二,我认为首先需要复合类型表示不良设计。课堂应该做一件事。如果要实现两个不同的接口,那么按照定义,您就没有做一件事。