GeeksforGeeks (Čeština)
Jedná se o kreační návrhový vzor, který hovoří o vytvoření objektu. Tovární návrhový vzor říká, že definuje rozhraní (rozhraní Java nebo abstraktní třída) a nechá podtřídy rozhodnout, který objekt má být vytvořen. Tovární metoda v rozhraní umožňuje třídě odložit instanci na jednu nebo více konkrétních podtříd. Vzhledem k tomu, že tyto návrhové vzory hovoří o instanci objektu, spadá do kategorie kreačního návrhového vzoru. Pokud si všimneme názvu Tovární metoda, znamená to, že existuje metoda, která je továrnou, a obecně jsou továrny zapojeny do tvorby a zde se vytváří objekt. Je to jeden z nejlepších způsobů, jak vytvořit objekt, kde je logika vytváření objektu pro klienta skrytá. Nyní se podívejme na implementaci.
Implementace:
1. Definujte tovární metodu uvnitř rozhraní.
2. Nechte podtřídu implementovat výše uvedenou tovární metodu a rozhodněte se, který objekt vytvořit.
V konstruktorech Java nejsou polymorfní, ale umožněním podtřídy vytvořit objekt přidáváme do instance polymorfní chování. Stručně řečeno, snažíme se dosáhnout Pseudo polymorfismu tím, že necháme podtřídu rozhodnout, co vytvořit, a tak se tato metoda Factory také nazývá jako
Virtuální konstruktor. Zkusme to implementovat pomocí problému v reálném čase a nějakého cvičení kódování.
Prohlášení o problému:
Zvažte, že chceme implementovat službu upozornění prostřednictvím e-mailu, SMS a oznámení push. Zkusme to implementovat pomocí návrhového vzoru tovární metody. Nejprve pro to navrhneme diagram tříd UML.
Ve výše uvedeném diagramu tříd máme rozhraní s názvem Oznámení a tři konkrétní třídy implementují rozhraní oznámení. Pro získání objektu oznámení je vytvořena tovární třída NotificationFactory. Pojďme nyní skočit do kódování.
Vytvořit rozhraní oznámení
public
interface
Notification {
void
notifyUser();
}
Poznámka – Výše uvedené rozhraní lze vytvořit také jako abstraktní třídu.
Vytvořte všechny implementační třídy
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"
);
}
}
Vytvořte třídu Factory NotificationFactory.java pro vytvoření instance konkrétní třídy.
Nyní použijeme tovární třídu k vytvoření a získání objektu konkrétní třídy předáním některých informací.
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
Příklady v reálném čase
Tento návrhový vzor byl v JDK široce používán, například
1. Metoda getInstance () v java.util.Calendar, NumberFormat a ResourceBundle používá návrhový vzor tovární metody.
2. Všechny obalové třídy jako Integer, Boolean atd. V Javě používají tento vzor k vyhodnocení hodnot 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 () jsou některé z dalších příkladů, kdy byl použit vzor návrhu tovární metody.
Závěr
Zatím jsme zjistili, co je vzor návrhu tovární metody a jak jej implementovat. Věřím, že nyní poctivě chápeme výhody tohoto konstrukčního mechanismu.