Microsoft Word кл программирование на Java 2020 Зорина docx


 Фабричный метод - factory method (Создание классов)



Pdf көрінісі
бет47/65
Дата17.10.2023
өлшемі3,23 Mb.
#117230
түріРеферат
1   ...   43   44   45   46   47   48   49   50   ...   65
Байланысты:
Лекции

5.3 Фабричный метод - factory method (Создание классов) 
Основное по этому паттерну: 
– 
определите интерфейс для создания объектов, но пусть подклассы сами 
решают, какие объекты создавать; 
– 
Factory Method позволяет классу отложить создание экземпляров для 
подклассов. 
Мотивация к использованию: 
– 
Фреймворк использует абстрактные классы для определения и 
поддержания отношений между объектами в иерархии. 
– 
Фреймворк также должен создавать объекты (он должен создавать 
экземпляры классов, но знает только об абстрактных классах – экземпляры которых 
он которые не может создавать.
– 
Фабричный метод инкапсулирует знания о том, какой подкласс создавать, 
- выводит эти знания за рамки. 
Когда использовать 
Используйте шаблон Factory Method, когда: 
– 
вы заранее не можете предвидеть в классе сколько классов объектов на 
его основе будет создано; 
– 
класс хочет, чтобы его подклассы указывали объекты, которые он 
создает; 


98 
– 
классы 
делегируют 
ответственность 
одному 
из 
нескольких 
вспомогательных подклассов, и вы хотите локализовать сведения о том, какой 
вспомогательный подкласс является делегатом; 

когда заранее неизвестны типы и зависимости объектов, с которыми 
должен работать ваш код; 

фабричный метод отделяет код производства продуктов от остального 
кода, который эти продукты использует; 

благодаря этому, код производства можно расширять, не трогая 
основной; 

так, для того чтобы, добавить поддержку нового продукта, вам нужно 
создать новый подкласс и определить в нём фабричный метод, возвращая оттуда 
экземпляр нового продукта. 
Мотивация 

Когда вы хотите дать возможность пользователям расширять части 
вашего фреймворка или библиотеки. 

Пользователи могут расширять классы вашего фреймворка через 
наследование. Но как сделать так, чтобы фреймворк создавал объекты из этих новых 
классов, а не из стандартных? 

Решением будет дать пользователям возможность расширять не только 
желаемые компоненты, но и классы, которые создают эти компоненты. А для этого 
создающие классы должны иметь конкретные создающие методы, которые можно 
определить. 

Например, вы используете готовый UI-фреймворк для своего 
приложения. Но вот беда — требуется иметь круглые кнопки, вместо стандартных 
прямоугольных. Вы создаёте класс RoundButton. Но как сказать главному классу 
фреймворка UIFramework, чтобы он теперь создавал круглые кнопки, вместо 
стандартных? 
Пример 
Автозавод выпускает различные автомобили (объекты в виде машин).


99 
В оригинале: 

разные классы реализуют интерфейс автомобиль; 

непосредственно создавать объекты автомобилей; 

нужно изменить клиента, чтобы сменить авто. 
С использованием паттерна: 

используйте класс carFactory class, чтобы создавать объекты- машины; 

можно менять автомобиль, посредством изменения carFactory. 
Пример
class 350Z implements Car; 
// fast car 
class Ram implements Car;
// truck 
class Accord implements Car; // family car 
Car fast = new 350Z(); 
// returns fast car 
public class carFactory { 
public static Car create(String type) { 
if (type.equals("fast"))
return new 350Z(); 
if (type.equals("truck")) 
return new Ram(); 
else if (type.equals(“family”) 
return new 
Accord(); 


Car fast = carFactory.create("fast"); // returns fast 
car 


Достарыңызбен бөлісу:
1   ...   43   44   45   46   47   48   49   50   ...   65




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет