GeeksforGeeks (Magyar)
Ez egy kreatív tervezési minta, amely egy objektum létrehozásáról beszél. A gyári tervezési minta azt mondja, hogy definiáljon egy interfészt (java felület vagy absztrakt osztály), és hagyja, hogy az alosztályok döntsék el, melyik objektumot példányosítsák. A felület gyári módja lehetővé teszi az osztály számára, hogy egy vagy több konkrét alosztályra halasszák a példányosítást. Mivel ezek a tervezési minták egy tárgy példányosításáról beszélnek, és így a kreatív tervezési minta kategóriájába tartozik. Ha észrevesszük a Gyári módszer nevet, ez azt jelenti, hogy van egy módszer, amely gyár, és általában a gyárak kreatív dolgokkal foglalkoznak, és itt ezzel egy objektum jön létre. Ez az egyik legjobb módszer egy objektum létrehozására, ahol az objektum létrehozási logikája el van rejtve az ügyfél előtt. Most nézzük meg a megvalósítást.
Megvalósítás:
1. Határozzon meg egy gyári módszert az interfészen belül.
2. Hagyja, hogy az alosztály megvalósítsa a fenti gyári módszert, és döntse el, melyik objektumot hozza létre.
A Java-ban a konstruktorok nem polimorfak, de lehetővé téve az alosztály számára az objektum létrehozását, hozzáadjuk a polimorf viselkedést a példányosításhoz. Röviden: Pszeudo polimorfizmust próbálunk elérni azáltal, hogy hagyjuk, hogy az alosztály döntse el, mit hoz létre, ezért ezt a Factory-módszert
Virtuális konstruktornak is nevezik. Próbáljuk valós idejű problémával és néhány kódolási gyakorlattal megvalósítani.
Hibabejelentés:
Fontolja meg, hogy értesítési szolgáltatást szeretnénk létrehozni e-mailben, SMS-ben és push értesítés útján. Próbáljuk meg ezt megvalósítani a gyári módszer tervezési mintájának segítségével. Először ehhez tervezünk egy UML osztálydiagramot.
A fenti osztálydiagramon van egy Értesítés nevű felületünk, és három konkrét osztály hajtja végre az Értesítési felületet. A NotificationFactory gyári osztály jön létre, hogy értesítési objektumot kapjon. Ugorjunk most bele a kódolásba.
Értesítési felület létrehozása
public
interface
Notification {
void
notifyUser();
}
Megjegyzés – A fenti felület absztrakt osztályként is létrehozható.
Az összes megvalósítási osztály létrehozása
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"
);
}
}
Hozzon létre egy gyári NotificationFactory.java osztályt a konkrét osztály példányosításához.
Most a gyári osztály segítségével hozzunk létre és szerezzünk be konkrét osztályú objektumot, átadva néhány információt.
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
Valós idejű példák
Ezt a tervezési mintát széles körben használták a JDK-ban, például
1. A java.util.Calendar, a NumberFormat és a ResourceBundle getInstance () metódusa a gyári módszer tervezési mintáját használja.
2. A Java összes burkolóosztálya, például az Integer, a Boolean stb., Ezt a mintát használja az értékek értékének kiértékeléséhez valueOf () módszerrel.
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.A forName () néhány olyan példa, ahol a gyári módszer tervezési mintáját alkalmazták.
Következtetés
Eddig megtanultuk, mi a gyári módszer tervezési mintája és hogyan kell azt megvalósítani. Úgy gondolom, hogy most már tisztában vagyunk a tervezési mechanizmus előnyeivel.