Домой Без рубрики Java: шаблон фабричного метода проектирования | Объектно-ориентированный дизайн | Шаблоны проектирования

Java: шаблон фабричного метода проектирования | Объектно-ориентированный дизайн | Шаблоны проектирования

610
0

Factory Design Pattern — это один из шаблонов Creational Design, который широко используется в JDK, а также в таких средах, как Spring MVC и Struts. Шаблон фабричного метода — это объектно-ориентированный шаблон творческого проектирования, предназначенный для реализации концепции фабрик, который решает проблему создания объектов (продуктов) без указания точного класса объекта, который будет создан. Суть этого шаблона заключается в том, чтобы « определить интерфейс для создания объекта, но позволить классам, которые реализуют интерфейс, решить, какой класс создать. Метод Factory позволяет классу откладывать создание экземпляров для подклассов «.

Давайте сначала узнаем, как реализовать фабричный шаблон в Java . Мы создадим 5 классов для реализации этого шаблона.

  • Супер Класс (CrunchfiyCompany.java)
    • Суперкласс в фабричном шаблоне может быть интерфейсом, абстрактным классом или обычным Java-классом. Для нашего примера у нас есть супер класс как абстрактный класс с переопределенным toString() метод для целей тестирования.
  • Sub Class1 (CrunchifyEbay.java)
    • Обратите внимание, что класс расширяет класс CrunchfiyCompany.
  • Sub Class2 (CrunchifyGoogle.java)
    • Обратите внимание, что класс расширяет класс CrunchfiyCompany.
  • Фабричный класс (CrunchifyFactoryPattern.java)
    • Теперь, когда у нас есть готовые суперклассы и подклассы, мы можем написать наш фабричный класс.
    • Мы можем сохранить класс Factory Singleton или метод, который возвращает подкласс статический.
    • Обратите внимание, что на основе входного параметра создается и возвращается другой подкласс.
  • Тестовый класс (CrunchifyFactoryPatternTest.java)
    • Простая тестовая клиентская программа, использующая вышеуказанную фабричную реализацию.

Другое должно гласить:

CrunchfiyCompany.java

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
пакет ком . crunchify. учебные пособия ;
/ **
* @author Crunchify.com
* /
// Суперкласс в фабричном шаблоне может быть интерфейсом, абстрактным классом или
// нормальный Java-класс. Для нашего примера у нас есть супер класс как абстрактный класс
// с переопределенным методом toString () для целей тестирования.
общественности Аннотация учебный класс CrunchfiyCompany {
общественности Аннотация строка getPhoneNumber ( ) ;
общественности Аннотация строка getZipCode ( ) ;
@Override
общественности строка toString ( ) {
вернуть Телефон № = + это. getPhoneNumber ( ) + , Почтовый индекс = + это. getZipCode ( ) ;
}
}
CrunchifyEbay.java

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
пакет ком . crunchify. учебные пособия ;
/ **
* @author Crunchify.com
* /
// Обратите внимание, что класс расширяет класс CrunchfiyCompany.
общественности учебный класс CrunchifyEbay продолжается CrunchfiyCompany {
частный строка номер телефона ;
частный строка zipCode ;
общественности CrunchifyEbay ( String номер телефона , строка zipCode ) {
это. номер телефона знак равно номер телефона ;
это. почтовый индекс знак равно zipCode ;
}
@Override
общественности строка getPhoneNumber ( ) {
вернуть это. номер телефона ;
}
@Override
общественности строка getZipCode ( ) {
вернуть это. zipCode ;
}
}
CrunchifyGoogle.java

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
пакет ком . crunchify. учебные пособия ;
/ **
* @author Crunchify.com
* /
// Обратите внимание, что класс расширяет класс CrunchfiyCompany.
общественности учебный класс CrunchifyGoogle продолжается CrunchfiyCompany {
частный строка номер телефона ;
частный строка zipCode ;
общественности CrunchifyGoogle ( String номер телефона , строка zipCode ) {
это. номер телефона знак равно номер телефона ;
это. почтовый индекс знак равно zipCode ;
}
@Override
общественности строка getPhoneNumber ( ) {
вернуть это. номер телефона ;
}
@Override
общественности строка getZipCode ( ) {
вернуть это. zipCode ;
}
}
CrunchifyFactoryPattern.java

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
пакет ком . crunchify. учебные пособия ;
Импортировать ком . crunchify. учебники . CrunchfiyCompany ;
Импортировать ком . crunchify. учебники . CrunchifyEbay ;
Импортировать ком . crunchify. учебники . CrunchifyGoogle ;
/ **
* @author Crunchify.com
* /
// Теперь, когда у нас есть готовые суперклассы и подклассы, мы можем написать наш фабричный класс.
// Мы можем сохранить класс Factory Singleton или метод, который возвращает подкласс статический.
// Обратите внимание, что на основе входного параметра создается и возвращается другой подкласс.
общественности учебный класс CrunchifyFactoryPattern {
общественности статический CrunchfiyCompany getDetails ( String тип , строка номер телефона , строка zipCode ) {
если ( «Ebay» . EqualsIgnoreCase ( тип ) )
вернуть новый CrunchifyEbay ( phoneNumber , zipCode ) ;
еще если ( Google . EqualsIgnoreCase ( type ) )
вернуть новый CrunchifyGoogle ( phoneNumber , zipCode ) ;
вернуть ноль ;
}
}
CrunchifyFactoryPatternTest.java

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
пакет ком . crunchify. учебные пособия ;
Импортировать ком . crunchify. учебники . CrunchfiyCompany ;
Импортировать ком . crunchify. учебники . CrunchifyFactoryPattern ;
/ **
* @author Crunchify.com
* /
// Простая тестовая клиентская программа, использующая описанную выше реализацию фабричного шаблона.
общественности учебный класс CrunchifyFactoryPatternTest {
общественности статический недействительным main ( Строка [ ] аргументы ) {
CrunchfiyCompany eBay знак равно CrunchifyFactoryPattern . getDetails ( Ebay , 408.123.4567 , 98765 ) ;
CrunchfiyCompany Google знак равно CrunchifyFactoryPattern . getDetails ( Google , 519.123.4567 , «56789» ) ;
Система. вне. println ( Factory eBay Config :: + eBay ) ;
Система. вне. println ( Фабрика Google Config :: + гугл ) ;
}
}
Результаты

1
2
Фабрика eBay Config:: Телефон # = 408.123.4567, почтовый индекс = 98765
Фабрика Google Config:: Телефон # = 519.123.4567, почтовый индекс = 56789

Другие примеры использования Factory Pattern?

  • java.util. Календарь , ResourceBundle и NumberFormat getInstance() методы использует шаблон фабрики.
  • valueOf() метод в классах-обёртках, таких как Boolean, Integer и т. д.
ЧИТАТЬ ТАКЖЕ:  Как массово загрузить сообщения WordPress в буфер социальных сетей?

Преимущества фабричного образца:

  • Он используется, когда у нас есть суперкласс с несколькими подклассами и на основе входных данных нам нужно вернуть один из подклассов. Этот шаблон берет на себя ответственность за создание экземпляра класса от клиентской программы до фабричного класса.
  • Фабричный шаблон обеспечивает подход к коду для интерфейса, а не реализацию.
  • Фабричный шаблон удаляет создание экземпляров реальных классов реализации из клиентского кода, делая его более надежным, менее связанным и простым в расширении. Например, мы можем легко изменить реализацию класса ПК, потому что клиентская программа не знает об этом.
  • Фабричный шаблон обеспечивает абстракцию между реализацией и клиентскими классами посредством наследования.

Недостатки:

  • Фабрика должна использоваться для семейства предметов. Если классы не расширяют общий базовый класс или интерфейс, их нельзя использовать в шаблоне дизайна фабрики.

Список всех Java Web Development , Spring MVC учебники.

Java: шаблон фабричного метода проектирования | Объектно-ориентированный дизайн | Шаблоны проектирования

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь