java - 在 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
概念起什么名字?
解决方案
骨架实现
您当前的代码看起来有点像骨架实现。您可以在马萨诸塞理工学院或dzon上阅读有关它的更多信息。
它背后的想法是为客户端提供默认实现。您可以在 Java-Collections-API 中找到一些示例,例如AbstractCollection
,AbstractSet
和AbstractMap
.
一些建议
冗余接口
接口ClientAndHandler
是多余的。该类ClientAndHandler_Impl
应实现SomethingClient
and SomethingHandler
。
命名
我会将抽象类命名为ClientAndHandler_Impl
,AbstractClientInteraction
或者ClientInteractionSkeleton
如果您想明确说明您使用的是骨架实现。
推荐阅读
- sql - 工会条款用法
- python - 将连接查询的结果聚合到列表中
- javascript - PDF 表格大写
- javascript - 如何保留我的网页的按钮选择状态?
- apache-spark - 当指定存储级别时,在 pyspark2 中持久化数据帧不起作用。我究竟做错了什么?
- python - 如何在自训练的 word2vec 模型中删除单词
- laravel - vue中如何使用axios获取id选择的数据
- c - 如何读取文本文件并将其内容存储到另一个字符串中?C
- javascript - Object.keys(myObject).forEach() 会同步执行吗?
- powerbi - 如何在 Power BI 查询编辑器中为最大日期添加自定义列?