查看以下模型:最佳做法使用代碼的接口,但隱藏從最終用戶的內部方法
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