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

Давайте сначала узнаем, как реализовать фабричный шаблон в Java . Мы создадим 5 классов для реализации этого шаблона.
- Супер Класс (CrunchfiyCompany.java)
- Суперкласс в фабричном шаблоне может быть интерфейсом, абстрактным классом или обычным Java-классом. Для нашего примера у нас есть супер класс как абстрактный класс с переопределенным
toString()метод для целей тестирования.
- Суперкласс в фабричном шаблоне может быть интерфейсом, абстрактным классом или обычным Java-классом. Для нашего примера у нас есть супер класс как абстрактный класс с переопределенным
- Sub Class1 (CrunchifyEbay.java)
- Обратите внимание, что класс расширяет класс CrunchfiyCompany.
- Sub Class2 (CrunchifyGoogle.java)
- Обратите внимание, что класс расширяет класс CrunchfiyCompany.
- Фабричный класс (CrunchifyFactoryPattern.java)
- Теперь, когда у нас есть готовые суперклассы и подклассы, мы можем написать наш фабричный класс.
- Мы можем сохранить класс Factory Singleton или метод, который возвращает подкласс статический.
- Обратите внимание, что на основе входного параметра создается и возвращается другой подкласс.
- Тестовый класс (CrunchifyFactoryPatternTest.java)
- Простая тестовая клиентская программа, использующая вышеуказанную фабричную реализацию.
Другое должно гласить:
- Потокобезопасная и быстрая реализация Singleton в Java
- Что такое Daemon Thread в 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 ( ) ;
}
}
|
|
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 ;
}
}
|
|
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 ;
}
}
|
|
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 ) ;
вернуть ноль ;
}
}
|
|
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 и т. д.
Преимущества фабричного образца:
- Он используется, когда у нас есть суперкласс с несколькими подклассами и на основе входных данных нам нужно вернуть один из подклассов. Этот шаблон берет на себя ответственность за создание экземпляра класса от клиентской программы до фабричного класса.
- Фабричный шаблон обеспечивает подход к коду для интерфейса, а не реализацию.
- Фабричный шаблон удаляет создание экземпляров реальных классов реализации из клиентского кода, делая его более надежным, менее связанным и простым в расширении. Например, мы можем легко изменить реализацию класса ПК, потому что клиентская программа не знает об этом.
- Фабричный шаблон обеспечивает абстракцию между реализацией и клиентскими классами посредством наследования.
Недостатки:
- Фабрика должна использоваться для семейства предметов. Если классы не расширяют общий базовый класс или интерфейс, их нельзя использовать в шаблоне дизайна фабрики.
Список всех Java Web Development , Spring MVC учебники.
0.00 (0%) 0 votes











