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


 Паттерн абстрактная фабрика



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

5.4 Паттерн абстрактная фабрика. 
Техника использования объекта-фабрики для порождения объектов-продуктов, 
была положена в основу всех порождающих паттернов. Методы, принадлежащие 
объекту-фабрике, которые порождают и возвращают объекты-продукты, принято 
называть фабричными-методами (или виртуальными конструкторами). Схема 
представлена на рисунке 5.3. 


100 
Рисунок 5.3 – Пример использования паттерна 
Абстрактная фабрика — это порождающий паттерн проектирования, который 
позволяет создавать семейства связанных объектов, не привязываясь к конкретным 
классам создаваемых объектов. Семейство зависимых продуктов. Скажем, Кресло + 
Диван + Столик. Несколько вариаций этого семейства. Например, продукты Кресло, 
Диван и Столик представлены в трёх разных стилях: Арт-деко, Викторианском и 
Модерне. 
Кроме того, вы не хотите вносить изменения в существующий код при 
добавлении новых продуктов или семейств в программу. Поставщики часто 
обновляют свои каталоги, и вы бы не хотели менять уже написанный код каждый раз 
при получении новых моделей мебели. 
Далее вы создаёте абстрактную фабрику — общий интерфейс, который 
содержит методы создания всех продуктов семейства (например, создатьКресло, 
создатьДиван и создатьСтолик). Эти операции должны возвращать абстрактные типы 
продуктов, представленные интерфейсами, которые мы выделили ранее — Кресла, 
Диваны и Столики. 
Клиентский код должен работать как с фабриками, так и с продуктами только 
через их общие интерфейсы. Это позволит подавать в ваши классы любой тип 
фабрики и производить любые продукты, ничего не ломая. 
5.5 Дженерики или обобщенные типы в Java. 


101 
Пример 1 – Определение обобщенных типов: 
public interface List {
void add(E x); 
Iterator iterator(); 

public interface Iterator
E next(); 
boolean hasNext(); 

public interface Map
V put(K key, V value); 

Пример 2 –определение (своего собственного) типа дженерика: 
public class GenericClass
private T obj; 
public void setObj(T t) {obj = t;} 
public T getObj() {return obj;} 
public void print() { 
System.
out
.println(obj); 


Main: 
GenericClass g = new GenericClass(); 
g.setObj(5); // auto-boxing 
int i = g.getObj(); // auto-unboxing 
g.print(); 
Пример 
class Crossover {} 
class Garage { 
private Crossover parkedAuto; 
public Garage(Crossover parkedAuto) { 
this.parkedAuto = parkedAuto; 

public Crossover getParkedAuto(){ return 
parkedAuto;} 

class Man { 
public static void main(String[] args) { 
Garage garage = new Garage (new Crossover()); 




102 
Проблемы 
Обычные классы и методы работаю с конкретными типами (примитивы или 
классы). Что делать, если нужно работать с разнообразными типами? 
Пример иерархии типов 
class Auto {} 
class Crossover extends Auto{} 
class Hatchback extends Auto{} 
class Garage { 
private Auto parkedAuto; 
public Garage(Auto parkedAuto) { //
конструктор
this.parkedAuto = parkedAuto; 

public Auto getParkedAuto(){ return parkedAuto;} 

class Main { 
public static void main(String[] args) { 
Garage garage = new Garage (new Crossover()); 
Garage anotherGarage = new Garage (new 
Hatchback()); 

}


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




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

    Басты бет