• Nie Znaleziono Wyników

Factory Method (Metoda wytwórcza) (Wirtualny Konstruktor)

N/A
N/A
Protected

Academic year: 2021

Share "Factory Method (Metoda wytwórcza) (Wirtualny Konstruktor)"

Copied!
7
0
0

Pełen tekst

(1)

Factory Method (Metoda wytwórcza) (Wirtualny Konstruktor)

Cel:

Zdefiniowanie interfejsu do tworzenia obiektów i pozwolenie klasom potomnym na decydowanie jakiej klasy obiekt utworzyć.

Przykład:

(2)

Zastosowanie:

• gdy klasa nie jest w stanie przewidzieć jakiej klasy obiekty ma tworzyć.

• gdy klasa chce, by to jej klasy potomne decydowały jakie obiekty będą tworzone.

• gdy klasa składa część odpowiedzialności na jedną z kilku pomocniczych podklas i chcemy wiedzieć której z tych pomocniczych klas użyć.

Struktura:

(3)

Składniki:

• Product – definiuje interfejs obiektu tworzonego przez fabrykę.

• ConcreteProduct – implementuje ten interfejs.

• Creator – deklaruje metodę wytwórczą zwracającą obiekt klasy Product. Może również udostępniać domyślną implementację tej metody, a także wywoływać ją w celu tworzenia produktów.

• ConcreteCreator – implementuje metodę wytwórczą, zwracając instancję konkretnego produktu.

Zależności:

Kreator zostawia swym klasom potomnym zdefiniowanie Factory Method i zwrócenie instancji właściwego Produktu.

Konsekwencje:

1. Kod operuje jedynie interfejsem Produktu, nie zależy od jakiegoś specyficznego ConcreteProduct.

2. Hermetyzacja procesu tworzenia obiektu – użyteczne, gdy jest to złożoną operacją.

3. Zostawia miejsce na ewentualne rozszerzanie Produktu lub Fabryki.

4. Wiąże równoległe hierarchie klas – metoda wytwórcza może być wywoływana nie tylko przez samą fabrykę, ale i zewnętrznego klienta, który dzięki temu uzyskuje właściwy produkt dla danej fabryki.

(4)

5. Potencjalny minus Factory Method – może okazać się, że klient musi dziedziczyć z klasy Kreatora wyłącznie po to, aby stworzyć własny ConcreteProduct.

Implementacja

1. Dwa podstawowe warianty: (1) klasa Kreatora jest abstrakcyjna i nie zapewnia implementacji dla metody fabrykującej, (2) Kreator jest konkretną klasą i

udostępnia domyślną implementację metody fabrykującej. W pierwszym wypadku musimy dziedziczyć, w drugim Factory Method istnieje właściwie tylko dla przyszłej rozszerzalności.

2. Sparametryzowana metoda wytwórcza. Jedna metoda do tworzenia wielu rodzajów produktów. Przyjmuje ona parametr identyfikujący rodzaj obiektu, jaki ma być stworzony. Wszystkie obiekty tworzone przez Factory Method mają wspólny interfejs Produktu. Dziedziczenie z takiego Kreatora pozwala wybiórczo zmienić, rozszerzyć lub dodać gatunki tworzonych Produktów.

class Creator {

Product create(ProductId id) {

if (id == MINE) return new MyProduct();

if (id == YOURS) return new YourProduct();

// ...

return null;

} }

(5)

Przykładowy kod:

abstract class Shape {

public abstract String draw();

}

class TriangleShape extends Shape {

public String draw() { return "triangle"; } }

class CircleShape extends Shape {

public String draw() { return "circle"; } }

class SquareShape extends Shape {

public String draw() { return "square"; } }

(6)

class FiguresFactory {

public enum ShapeType { Triangle,

Square, Circle }

public static Shape createFigure(ShapeType type) { switch(type) {

case Triangle: return new TriangleShape();

case Circle: return new CircleShape();

case Square: return new SquareShape();

}

throw new IllegalArgumentException();

} }

class Client {

public static void main (String args[]) {

Shape figure = FigureFactory.createFigure(

FiguresFactory.ShapeType.Circle);

figure.draw();

} } }

(7)

Powiązania:

• Abstract Factory – przeważnie implementowana z użyciem Factory Methods.

• Factory methods są zazwyczaj wołane z użyciem Template Methods (np. metoda NewDocument z przykładu)

Cytaty

Powiązane dokumenty

Operacje podstawowe to metody chronione (protected) – będą mogły być wołane jedynie przez metodę szablonową. Mogą być abstrakcyjne (abstract), wtedy klasa potomna

Tez¡ systemu aksjomatycznego A jest ka»da formuªa ψ, która jest ostatnim elementem jakiego± dowodu... Trafno±¢

A być może historię powieści w ogóle dałoby się opisać jako w ynik nieustannej między nimi oscylacji. Flaubert, Gide czy Joyce wyznaczaliby jeden jej

W interesującym nas tutaj wydawnictwie tylko trzy artytkuły dotyczą bezpo­ średnio opanowywania przez człowieka, a ściślej przez kolonistów rosyjskich i

The risk originated from the greater installation depth of the dolphins related to the limited foundation depth of the existing foundations and from the structural analysis

Pod koniec zaj˛e´c prosz˛e spakowa´c ´zródła oraz rysunki / tabele i wysła´c na adres: bszafran@agh.edu.pl.. W programie wykorzystamy jednostki

Szukanym wielokątem jest wielokąt P będący otoczką wypukłą białych punktów – czyli najmniejszym wielokątem wypukłym, który zawiera punkty białe (w przypadku gdy liczba

Zhuang, Vandenberg i Huang (2012) w pracy na temat zagrożenia gospodar- ki chińskiej pułapką średniego dochodu twierdzą, że 28 krajów spośród badanych przez nich 125 na świecie