查看以下模型:最佳做法使用代码的接口,但隐藏从最终用户的内部方法
interface Context {
BeanFactory getBeanFactory(); // public method
void refresh(); // public method
void destroy(); // public method
}
interface BeanFactory {
<T> T getBean(String id); // public method
void destroyBeans(); // should be private method for user, but visible for Context
}
class ContextImpl implements Context {
private BeanFactory beanFactory;
@Override
public void destroy() {
beanFactory.destroyBeans();
}
}
ContextImpl
使用BeanFactory
界面,这就是为什么方法destroyBeans()
是摆在那里。但我不希望它在那里,因为它是内部API,应该隐藏给用户。
我想到使用AbstractBeanFactory
参考与Context
内的受保护destroyBeans()
方法。这将解决暴露方法给最终用户的问题,但将用抽象类替换接口。
另一个变体是创建另一个接口,它将扩展最终用户界面,并在Context中使用它。这将破坏用户创建自己的BeanFactory实现的能力。
我想知道是否有一个知名解决方案的问题或只是看到另一种选择。
对我来说,在界面中假设有私有方法是没有意义的。顾名思义,它是一个“INTERFACE”,内部实现(我的意思是私有方法)不应该成为恕我直言。 – Alp
你可以有两个接口,一个包含getBean()方法,另一个接口扩展它并添加'destroyBeans()'。 – biziclop