Java编程习语:私有实现类

时间:2012-08-10 05:48:12

标签: java private-members pimpl-idiom 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()  {
           ....
        }    
    } 

}

1 个答案:

答案 0 :(得分: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>
    {
        ...
    }
}

比较器实现类不需要在Person之外可见,并且能够通过公共静态字段轻松获取实例是很好的。

没有调用者需要知道实现 - 可能只有一个比较器类,它接受参数,例如 - 他们只是通过常量表达他们想要的比较器。 (当然,你可以同样使用枚举。)