Я просто считал Метод фабрики. Я понимаю, что это позволяет делегировать инстанцирование к подклассам. Но я не мог понять возможные применения в реальном сценарии.
Может любой давать один типичный пример, показывающий, как Шаблон "фабричный метод" может использоваться так, чтобы я мог коснуться того, что я считал.
Проблемный оператор, для которого шаблон "фабричный метод" является лучшим решением, был бы достаточен для прояснения.
Класс, реализующий фабричный шаблон проектирования, работает как мост между несколькими классами. Рассмотрим пример использования нескольких серверов баз данных, таких как SQL Server и Oracle. Если вы разрабатываете приложение, использующее базу данных SQL Server в качестве серверной части, но в будущем вам потребуется изменить серверную базу данных на oracle, вам необходимо будет изменить весь свой код, если вы не написали свой код в соответствии с заводским шаблоном проектирования.
В шаблоне проектирования фабрики для этого нужно проделать очень мало работы. Класс, реализующий шаблон проектирования фабрики, позаботится о вас и уменьшит вашу нагрузку. Переход с сервера базы данных вас совершенно не беспокоит. Вам просто нужно внести небольшие изменения в свой файл конфигурации.
Одним из примеров из библиотеки базовых классов .NET (BCL) является Control.CreateControlsInstance , который используется многими другими членами класса Control (Windows Forms).
Вы можете переопределить этот защищенный метод, чтобы предоставить свой собственный набор элементов управления, например когда вы реализуете настраиваемый элемент управления.
Из API, который я разрабатываю прямо сейчас:
WebGalleryFactory factory = WebGalleryFactory.newInstance (WebGalleryType.PICASA);
WebAlbum album = factory.createAlbum (title, description);
В этом примере я использую фабричный метод для создания абстрактной фабрики определенного типа (PICASA в примере ).
Эти два шаблона часто используются вместе.
Zend_Db использует его в своем классе Zend_Db_Adapter , чтобы разрешить создание различных типов объектов базы данных на основе настроек базы данных, передаваемых из объекта конфигурации.