Chi*_*hip 11 java pimpl-idiom private-members private-class
我在一些代码中找到了这个构造.
私有静态类实现A有什么好处吗?这让我想起了C++中的Pimpl成语.在Java中使用Pimpl习语是否有任何好处?
public abstract class A {
public void doStuff();
public static A getNewInstance() {
return new AImpl();
}
private static class AImpl extends A {
public void doStuff() {
....
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 17
私有静态类实现A有什么好处吗?
好吧,它完全隐藏了实现,所以从封装的角度来看它非常好.我在几次见过的一种情况是自定义比较器.例如:
public class Person
{
public static final Comparator<Person> NAME_COMPARATOR = new NameComparator();
public static final Comparator<Person> AGE_COMPARATOR = new AgeComparator();
// Name, age etc properties
private static class NameComparator implements Comparator<Person>
{
...
}
private static class AgeComparator implements Comparator<Person>
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
比较器实现类并不需要在外部可见Person,并且能够通过公共静态字段轻松获取实例是很好的.
没有调用者需要知道实现 - 例如,可能只有一个比较器类接受参数 - 他们只是通过常量表达他们想要的比较器.(当然,你可以同样使用枚举.)
| 归档时间: |
|
| 查看次数: |
2717 次 |
| 最近记录: |