Определение: Определите интерфейс для создания объекта, пусть подкласс решает, какой класс создает экземпляры, а заводский метод задерживает экземпляр класса для своего подкласса.
Тип: Создать диаграмму класса класса класса:
Заводский метод код шаблона
Интерфейс iProduct {public void productmethod (); } класс продукт реализует iProduct {public void productmethod () {System.out.println ("Product"); }} интерфейс ifactory {public iProduct createProduct (); } класс фабрика реализует ifactory {public iProduct createProduct () {return new Product (); }} public Class Client {public static void main (string [] args) {ifactory factory = new Factory (); IProduct продукт = factory.createProduct (); продукт.productmethod (); }} Фабричный режим:
Прежде всего, нам нужно поговорить о заводской модели. Заводские режимы разделены на три типа в соответствии со степенью абстракции: простой заводской режим (также известный как статический заводский режим), режим заводского метода, описанный в этой статье, и абстрактный заводский режим. Заводский режим - это модель, которая часто используется в программировании. Его основные преимущества:
Это может сделать структуру кода чистой и эффективно инкапсулировать изменения. При программировании экземпляры классов продукта иногда сложны и изменчивы. Благодаря заводской модели инкапсулируется экземпляр продукции, поэтому вызывающему абоненту не нужно заботиться о процессе экземпляров продукта и просто полагаться на завод, чтобы получить продукт, который они хотят.
Заблокируйте конкретные категории продуктов от вызывающего абонента. Если вы используете заводский режим, вызывающий звонок заботится только о интерфейсе продукта. Что касается конкретной реализации, абоненту вообще не нужно заботиться. Даже если конкретная реализация будет изменена, она не окажет влияния на вызывающего абонента.
Уменьшить связь. Инстанция классов продукта обычно очень сложна. Это требует полагаться на многие классы, и эти классы вообще не должны быть известны вызывающему. Если используется фабричный метод, все, что нам нужно сделать, это создать экземпляр класса продукта, а затем передать его для абонента для использования. Для вызывающего абонента классы, от которых зависит продукт, являются прозрачными.
Фабричный метод режим:
Через классовую диаграмму заводской схемы метода мы видим, что заводской шаблон метода имеет четыре элемента:
Заводской интерфейс. Фабричный интерфейс является ядром заводского метода и используется для предоставления продуктов непосредственно с вызывающим абонентом. В реальном программировании иногда используется абстрактный класс для взаимодействия с вызывающим абонентом, что по сути одинаково.
Заводская реализация. При программировании заводская реализация определяет, как создавать создание продуктов, что является способом достижения расширения. Количество требуемых продуктов - это столько же конкретных заводских реализаций, сколько и.
Интерфейс продукта. Основной целью интерфейса продукта является определение спецификаций продукта, и все реализации продукта должны соответствовать спецификациям, определенным интерфейсом продукта. Интерфейсы продукта - это то, что вызывающие абоненты заботятся большинство, а преимущества и недостатки определений интерфейса продукта непосредственно определяют стабильность кода вызывающего абонента. Аналогичным образом, интерфейсы продуктов также могут быть заменены на абстрактные классы, но будьте осторожны, чтобы не нарушать принцип замены Рихтера.
Реализация продукта. Конкретные категории интерфейсов продукта определяют конкретное поведение продукта в клиенте.
Преимущества модели метода завода:
1. Хорошая упаковка и уменьшить связь между модулями;
2. Сторонние интерфейсы продукта и блокировка категорий продуктов.
3. Типичная структура развязки. Модули высокого уровня должны знать только абстрактный класс продукта.
4. Соответствует закону о димитозе, принципом зависимости от инверсии и принципом замены Рихтера.
Применимые сценарии:
Будь то простая заводская модель, модель фабричного метода или абстрактная заводская модель, они имеют сходные характеристики, поэтому их применимые сценарии также похожи.
Во -первых, как шаблон класса создания, заводской шаблон метода может использоваться в любом месте сложных объектов. Следует отметить, что сложные объекты подходят для использования заводского режима, в то время как простые объекты, особенно объекты, которые могут быть созданы через новые, не нужно использовать заводский режим. Если вы используете заводскую модель, вам необходимо ввести фабричный класс, который увеличит сложность системы.
Во -вторых, заводская модель представляет собой типичный режим развязки, и закон Dimetter особенно очевиден в заводской модели. Если вызывающему нужно добавить зависимости, чтобы самостоятельно собрать продукт, он может рассмотреть возможность использования заводской модели. Это значительно уменьшит связь между объектами.
Опять же, поскольку заводская модель полагается на абстрактную архитектуру, она направляет задачу создания продукта для выполнения класса реализации, что имеет лучшую масштабируемость. Другими словами, когда система должна быть более масштабируемой, можно рассмотреть заводскую модель, а различные продукты могут быть собраны с различными заводами внедрения.
Типичные приложения
Чтобы проиллюстрировать преимущества заводской модели, не может быть более подходящего примера, чем сборка автомобиля. Сценарий такой: автомобиль состоит из двигателя, колес и шасси, и теперь необходимо собрать машину и передать его абоненту. Если режим завода не используется, код выглядит следующим образом:
класс Engine {public void getStyle () {System.out.println («Это двигатель автомобиля»); }} class oneypanpan {public void getStyle () {System.out.println ("Это шасси автомобиля"); }} класс wheel {public void getStyle () {System.out.println ("Это шина автомобиля"); / NOWERPAN NOWERPAN = new UnderPan (); Колесо колесо = новое колесо (); ICAR CAR = новый автомобиль (UnderPan, колесо, двигатель); car.show (); }}Видно, что для того, чтобы собрать автомобиль, абоненту также необходимо создать экземпляр двигателя, шасси и шин, и компоненты этих автомобилей не зависят от вызывающего абонента, что серьезно нарушает закон Димитта и имеет слишком высокую связь. И это очень неблагоприятно для расширения. Кроме того, в этом примере двигатель, шасси и шины относительно специфичны. В реальных приложениях компоненты этих продуктов могут быть абстрактными, и вызывающий абонент не имеет значения, как собрать продукт. Если используется фабричный метод, вся архитектура будет выглядеть намного яснее.
интерфейс ifactory {public icar createcar (); } класс фабрика реализует ifactory {public iCar createCar () {Engine Engine = new Engine (); NOWERPAN NOWERPAN = new UnderPan (); Колесо колесо = новое колесо (); ICAR CAR = новый автомобиль (UnderPan, колесо, двигатель); вернуть машину; }} public Class Client {public static void main (string [] args) {ifactory factory = new Factory (); ICAR CAR = Factory.CreateCar (); car.show (); }}После использования фабричного метода степень связи на стороне вызова значительно снижается. А для заводов это может быть расширено. Если вы хотите собрать другие автомобили в будущем, вам нужно только добавить еще одну заводскую реализацию. Как гибкость, так и стабильность были значительно улучшены.
PS: режим метода завода и простой фабричный режим
Простая заводская модель, упомянутая выше, очень похожа на модель фабричного метода. Основным классом фабрики является абстрактный заводский класс, в то время как простая заводская модель помещает ядро в конкретный класс. Разница в модели фабричного метода и простой заводской модели не очень очевидна.