- Используйте интерфейсы для определения того, что делает ваше приложение
- Создайте основную точку входа для доступа к сервисам, возвращая только интерфейсы
- Я бы не стал беспокоиться о фактическом сокрытии классов реализации.Вы никогда не сможете спрятать их в Java, и те, кому это интересно, могут просто запустить ваше приложение с помощью отладчика.Просто не предоставляйте общедоступных конструкторов, например
По поводу этого комментария:
Шон, не могли бы вы подробнее рассказать о своем ответе?...
Один из способов реализации моей второй маркированной точки, я имею в виду использование класса поиска служб, например,
public class Lookup {
private static final Foo foo = new FooImpl();
public static Foo getFoo() {
return foo;
}
}
Foo
- это интерфейс, FooImpl
- реализацияclass (который может быть закрытым для пакета, если вы хотите, чтобы клиенты не могли его создать)