use*_*112 0 java oop inheritance interface
我有几个类在子类型层次结构中是相同的"级别".我需要为每个实例创建一个ID,我通常通过拥有一个包含静态long的父类来实现,我只是为子类的每个实例增加它.
75%的子类型代码是相同的 - 这使我更喜欢使用抽象类(通过接口):
1)我可以为ID创建者声明一个静态变量
2)我可以将代码放在父类中,并在子类型中共享它
它是否正确?我似乎很少使用接口.当子类型需要相同的方法,但不同的实现时,以及当我不需要初始化要在子类型(如ID创建者)之间共享的属性时,我应该只使用接口吗?
我一直给同事们的印象是Interfaces比继承更受欢迎.
如果您有多个需要ID生成的类组,那么我不建议使用继承,因为它限制了重用.在这种情况下,为什么不构建一个提供唯一ID生成服务的独立抽象?你给它一个密钥,它会给你一个使用相同密钥在所有调用中唯一的ID.
public class IdGenerator
{
private IdGenerator() {} // no instantiation or subclassing
private static final ConcurrentMap<String, AtomicLong> ids =
new ConcurrentHashMap<String, AtomicLong>();
public static long id(String key) {
AtomicLong al = ids.get(key);
if (al == null) {
final AtomicLong newL = new AtomicLong(0);
al = ids.putIfAbsent(key, newL);
if (al == null) al = newL;
}
return al.getAndIncrement();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |