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.