В настоящее время я реализую шаблон дизайна Factory в Python, и у меня есть несколько вопросов.
-
Есть ли способ предотвратить прямое создание конкретных конкретных классов? Например, если у меня есть VehicleFactory, который порождает транспортные средства, я хочу, чтобы пользователи просто использовали этот factory, и не позволяли кому-либо случайно создавать экземпляр Car() или Truck() напрямую. Я могу исключить исключение из init(), но это также означает, что Factory не может создать экземпляр этого файла...
-
Мне кажется, что фабрики становятся привыкание. Похоже, что все должно стать Factory, чтобы при изменении внутренней реализации коды клиентов не изменились. Мне интересно узнать, когда возникает настоятельная необходимость использования заводов, и когда это нецелесообразно использовать. Например, у меня может быть класс Window, и теперь есть только один из этого типа (нет PlasticWindow, ReinforcedWindow или что-то в этом роде). В этом случае, должен ли я использовать Factory для клиента для создания окна, на всякий случай, если бы я мог добавить в будущем больше типов Windows?
-
Мне просто интересно, есть ли обычный способ вызвать фабрики. Например, теперь я называю свой Автомобиль Factory как Транспортные средства, поэтому коды будут выглядеть так, как Vehicle.create(...). Я вижу много учебников, которые делают это как VehicleFactory, но я нахожу его слишком длинным, и он также демонстрирует реализацию.
EDIT: То, что я подразумевал под "раскрытием реализации", заключается в том, что он позволяет людям знать, что это factory. Я чувствовал, что клиенту не нужно знать, что это factory, а скорее как некоторый класс, который может возвращать вам объекты (что, конечно, есть Factory, но, возможно, нет необходимости явно указывать клиентам это?). Я знаю, что коды сур легко раскрываются, поэтому я не имел в виду "разоблачение того, как функциональные возможности реализованы в исходных кодах".
Спасибо!