Это ужасный дизайн. Это не SOLID. Чаще всего сравнение типов во время выполнения является признаком плохого дизайна. Полиморфизм - это ответ. Что еще хуже, этот завод может создавать только один вид коннекта, поэтому он должен сравнивать строки один раз, а не делать это при каждом вызове CreateConnection. Что еще хуже - струны. Почему бы не перечислять или статические ints? (Все ошибки этого примера, конечно, вызваны его демонстрационным характером. Но каждый пример такого рода должен иметь побочный эффект о недостатках - потому что он может придерживаться - когда вы читаете руководство, вы, естественно, утверждаете, что то, что он говорит, правильно)
надлежащий завод в этом случае:
public interface ConnectionFactory {
Connection createConnection();
}
public class OracleConnectionFactory implements ConnectionFactory {
public Connection createConnection(){
return new OracleConnection();
}
}
public class SqlServerConnectionFactory implements ConnectionFactory {
public Connection createConnection(){
return new SqlServerConnection();
}
}
Insted из:
FirstFactory factory = new FirstFactory("Oracle");
Вы бы:
ConnectionFactory factory = new OracleConnectionFactory();
Если вы хотите новый вид подключения, вы бы добавить новый завод, и изменил одну строку, вы не должны модифицировать существующие классы.
Один вопрос: В приведенном выше примере вы видите «композицию» или «наследование»? Тип класса подключения используется внутри класса factoryA. C++. –
Я тоже не думаю. Заводский класс не состоит из соединений, он создает и возвращает их. И вообще никакого наследования нет. – Dirk
Может ли тот же код быть написан на C++? Я думаю, что концепция общественных классов в Java? –