gpt4 book ai didi

api - 类/接口(interface) "Default"实现的命名约定

转载 作者:行者123 更新时间:2023-12-04 14:15:15 25 4
gpt4 key购买 nike

我看过the canonical StackOverflow 上的类/接口(interface)命名问题并阅读了很多其他 opinions关于这个主题,但我有一个相关的问题,我不确定是否在这些地方得到回答。我倾向于讨厌 IInterface 或 ClassImpl 命名约定,因为它们是不必要的(考虑到现代 IDE),使代码更难阅读,并且在许多情况下,需要使用其中一种命名模式似乎意味着设计不正确。
但是,我经常遇到这样一种情况:我有一个想要作为 API 的一部分公开的接口(interface)(通常在一个单独的包中),然后我创建了一个接口(interface)的抽象实现以包含一些我最期待的常见功能(但不是全部)具体实现。例如:

public interface Foo {
public String getBar();
}

public abstract class BasicFoo implements Bar {
private String bar;

@Override
public String getBar() {
return bar;
}
}
在实践中,我倾向于使用 Basic 作为实现名称的前缀,但我所做的基本上正是某些人使用 Impl 后缀的目的:提供基本/默认实现。我可以尝试一个暗示它是由内存存储(例如 Bar)支持的 Foo 的名称,但它总是捕获 BasicFoo 中的所有功能。我也不相信我应该抛弃接口(interface)并直接公开实现,因为接口(interface)提供了额外的灵 active 和解耦。
关于处理这种情况的更好方法或逻辑命名约定的想法?

最佳答案

Java 世界中的一个常见模式是调用抽象的、不完整的实现 AbstractSomething ;例如 AbstractList AbstractButton .接口(interface)和抽象类都暴露给客户端。这背后的想法是抽象类作为使用 API 的起点。这对于定义许多方法和复杂协定的接口(interface)尤其有用,例如 java.util.List。接口(interface)的大多数方法都是根据客户端必须提供的最小抽象方法集来实现的。

例如,实现一个基于 AbstractList 的列表。您只需提供 get(index) 的实现和 size()方法。所有其他操作 - 迭代器,indexOf , subList , hashCode ... - 最终委托(delegate)给这两个。

关于api - 类/接口(interface) "Default"实现的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com