GeeksforGeeks (Polski)
Jest to kreacyjny wzorzec projektowy, który mówi o tworzeniu obiektu. Wzorzec projektowy fabryki mówi, że definiuje interfejs (interfejs Java lub klasa abstrakcyjna) i pozwala podklasom zdecydować, który obiekt ma zostać utworzony. Metoda fabryki w interfejsie pozwala klasie odroczyć tworzenie instancji do jednej lub kilku konkretnych podklas. Ponieważ te wzorce projektowe mówią o tworzeniu instancji obiektu, należy to do kategorii kreacyjnego wzorca projektowego. Jeśli zauważymy nazwę Metoda fabryczna, oznacza to, że istnieje metoda, która jest fabryką i generalnie fabryki są zaangażowane w kreację i tutaj powstaje obiekt. Jest to jeden z najlepszych sposobów tworzenia obiektu, w którym logika tworzenia obiektów jest ukryta dla klienta. Przyjrzyjmy się teraz implementacji.
Implementacja:
1. Zdefiniuj metodę fabryki w interfejsie.
2. Niech podklasa implementuje powyższą metodę fabryczną i zdecyduje, który obiekt utworzyć.
W Javie konstruktory nie są polimorficzne, ale pozwalając podklasie na tworzenie obiektu, dodajemy do instancji zachowanie polimorficzne. Krótko mówiąc, próbujemy osiągnąć pseudopolimorfizm, pozwalając podklasie decydować, co ma utworzyć, dlatego ta metoda Factory jest również nazywana
Wirtualny konstruktor. Spróbujmy to zaimplementować z problemem czasu rzeczywistego i ćwiczeniami z kodowania.
Opis problemu:
Rozważmy, że chcemy wdrożyć usługę powiadamiania przez e-mail, SMS i powiadomienia push. Spróbujmy to zaimplementować za pomocą wzorca projektowania metody fabrycznej. Najpierw zaprojektujemy do tego diagram klas UML.
Na powyższym diagramie klas mamy interfejs o nazwie Notification, a trzy konkretne klasy implementują interfejs Notification. Tworzona jest klasa fabryczna NotificationFactory w celu pobrania obiektu Notification. Przejdźmy teraz do kodowania.
Utwórz interfejs powiadomień
public
interface
Notification {
void
notifyUser();
}
Uwaga – Powyższy interfejs można również stworzyć jako klasę abstrakcyjną.
Utwórz wszystkie klasy implementacji
SMSNotification.java
public
class
SMSNotification
implements
Notification {
@Override
public
void
notifyUser()
{
System.out.println(
"Sending an SMS notification"
);
}
}
EmailNotification.java
public
class
EmailNotification
implements
Notification {
@Override
public
void
notifyUser()
{
System.out.println(
"Sending an e-mail notification"
);
}
}
PushNotification.java
public
class
PushNotification
implements
Notification {
@Override
public
void
notifyUser()
{
System.out.println(
"Sending a push notification"
);
}
}
Utwórz klasę fabryczną NotificationFactory.java, aby utworzyć instancję konkretnej klasy.
Teraz użyjmy klasy fabrycznej, aby utworzyć i pobrać obiekt konkretnej klasy, przekazując pewne informacje.
public
class
NotificationService {
public
static
void
main(String args)
{
NotificationFactory notificationFactory =
new
NotificationFactory();
Notification notification = notificationFactory.createNotification(
"SMS"
);
notification.notifyUser();
}
}
Output : Sending an SMS notification
Przykłady w czasie rzeczywistym
Ten wzorzec projektowy jest szeroko stosowany w JDK, np.
1. getInstance () metody java.util.Calendar, NumberFormat i ResourceBundle używa wzorca projektowego metody fabrycznej.
2. Wszystkie klasy opakowania, takie jak Integer, Boolean itp. W Javie używają tego wzorca do oceny wartości za pomocą metody valueOf ().
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () to tylko niektóre z innych przykładów użycia wzorca projektowania metody Factory.
Podsumowanie
Do tej pory dowiedzieliśmy się, czym jest wzorzec projektowy metody Factory i jak go zaimplementować. Wydaje mi się, że teraz dobrze rozumiemy zalety tego mechanizmu projektowania.