Если у них нет общего кода, то это действительно два отдельных класса. Вы, вероятно, даже не хотите, чтобы код администратора присутствовал в браузере, так как он все равно не может быть использован.
Вы могли бы иметь одну фабричную функцию, которая просматривает параметр администратора, создает экземпляр соответствующего объекта базы данных и возвращает его, но я не думаю, что даже понимаю, почему вы беспокоитесь об этом.
Просто попросите каждого клиента создать соответствующий объект БД. Если есть какой-либо общий код, вы можете иметь обе реализации, наследуемые от общей базы, и поместить общий код в базовый класс.
Верно! Я забыл упомянуть, но есть некоторый общий код ... соединение и аутентификация точно такие же, например. Вы знаете какой-либо шаблон дизайна, который идеально подходит для этого варианта использования? Должен ли я узнать о фабриках?
Я думаю, что общий базовый класс с наследованием решает проблему здесь. Это естественное место для размещения общего кода без необходимости включения серверного кода в клиентскую реализацию. Реализация браузера и реализация сервера будут подклассом, который присутствует только на их соответствующих платформах. Общий базовый класс будет присутствовать и использоваться в обоих местах.
У вас просто есть клиент создает экземпляр соответствующего листового класса, и общий код живет в базовом классе. Если вы хотите скрыть фактические конструкторы классов, вы можете использовать фабричную функцию (это просто простая функция, которая смотрит на условия, создает для вас подходящий объект и возвращает его), но я не уверен, что есть веские причины для использования заводская функция здесь. Вы бы включили только соответствующий листовой класс на платформе, для которой он предназначен, поэтому нет места, где вы могли бы использовать один или другой в том же коде.