дизайн библиотеки - шаблон, ограничивающий использование "внутренних" классов / методов - PullRequest
2 голосов
/ 14 декабря 2011

Я наткнулся на небольшую библиотеку, в которой есть несколько классов в четырех пакетах и ​​один базовый класс, который должен использовать тот, кто когда-либо будет использовать эту библиотеку.

Мне пришлось просмотреть эту библиотеку и предположить, что доступнекоторые классы и методы должны быть ограничены, так как пользователь должен видеть только те методы / классы, которые он действительно должен использовать.В этом случае это должен быть один класс с несколькими методами, которые можно вызывать.

Хотя мое предложение только пришло мне в голову, я не смог найти реального решения, как это сделать.

Первая уродливая идея заключалась в следующем: поместить открытый класс в пакет a, а все остальное в пакет a.b, что не очень хорошая идея.

Структура пакета предотвращает использование модификатора protected в виде классовв пакете a.b нужно вызывать методы из класса в пакете a.c.Так есть ли шаблон, который можно использовать, чтобы предотвратить создание экземпляра класса внутри a.b и вызывать его общедоступные методы?

Если описание проблемы не было достаточно хорошим, не стесняйтесь спрашивать вкомментарии.Спасибо.

Ответы [ 4 ]

3 голосов
/ 14 декабря 2011

Хотя я не понимаю вашего предложения о модификаторе защищенного доступа (не упакованы ли b и c?), Есть два предложения:

  • Сокращение или управление созданием объектовчерез фабричные методы
  • Если, как вы говорите, основной класс обращается к вещам из других пакетов, то, скорее всего, его можно рассматривать как различные типы.Если это так, вы можете создать различные интерфейсы, которые соответствуют функциональным обязательствам каждого пакета, скажем InterfacePackA, InterfacePackB, которые будет реализовывать ваш основной класс, и, следовательно, клиентский код будет содержать ваш основной класс в соответствии с типом интерфейса предпочтения, уменьшая этоКстати, сфера и функциональность довольно общего и узкого главного класса.
1 голос
/ 14 декабря 2011

Поместите классы, которые вы не хотите, чтобы другие люди видели с модификатором по умолчанию (в основном без модификатора вообще). Это сделает их пакетно-приватным.

Все классы в пакете смогут видеть и использовать их, но никто за пределами библиотеки не сможет их создать и использовать без читов.

Это означает, что библиотека должна использовать один пакет.

0 голосов
/ 14 декабря 2011

У Java нет способа остановить общедоступные классы в банке от вызова.Если вы скрываете то, что делают другие классы, запутывая их, тогда вы можете выдать свой jar-файл и открыть только те классы, которые вы хотели использовать.Это не сделает невозможным использование ваших общедоступных классов, но потребует больше работы, чем это, вероятно, стоит.

0 голосов
/ 14 декабря 2011

Поместите классы, которые люди не должны использовать в качестве private static классов внутри основного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...