GeeksforGeeks (Suomi)
Se on luova suunnittelumalli, joka puhuu objektin luomisesta. Tehtaan suunnittelumallissa sanotaan, että määritetään käyttöliittymä (Java-käyttöliittymä tai abstrakti luokka) ja annetaan aliluokkien päättää, mikä objekti instantisoidaan. Rajapinnan tehdasmenetelmän avulla luokka voi lykätä yhden tai useamman konkreettisen alaluokan ilmentymistä. Koska nämä suunnittelumallit puhuvat kohteen välittömästä ilmentymisestä, joten se kuuluu luovan suunnittelumallin luokkaan. Jos havaitsemme nimen Factory-menetelmä, se tarkoittaa, että on olemassa menetelmä, joka on tehdas, ja yleensä tehtaat ovat mukana luovissa asioissa ja tässä luodaan objektia. Se on yksi parhaista tavoista luoda objekti, jossa objektin luontilogiikka on piilotettu asiakkaalle. Katsotaan nyt toteutusta.
Toteutus:
1. Määritä tehtaan menetelmä käyttöliittymän sisällä.
2. Anna alaluokan toteuttaa yllä oleva tehdasmenetelmä ja päättää mikä objekti luoda.
Java-sovelluksessa konstruktorit eivät ole polymorfisia, mutta antamalla aliluokan luoda objektin, lisäämme polymorfista käyttäytymistä ilmentymään. Lyhyesti sanottuna yritämme saavuttaa Pseudo-polymorfismin antamalla alaluokan päättää mitä luoda, joten tätä Factory-menetelmää kutsutaan myös nimellä Virtuaalinen konstruktori. Yritetään toteuttaa se reaaliaikaisella ongelmalla ja koodausharjoituksella.
Ongelma:
Harkitse, että haluamme ottaa käyttöön ilmoituspalvelun sähköpostitse, tekstiviestillä ja push-ilmoituksella. Yritetään toteuttaa tämä tehdasmenetelmien suunnittelumallin avulla. Ensin suunnitellaan tätä varten UML-luokkakaavio.
Yllä olevassa luokkakaaviossa meillä on käyttöliittymä nimeltä Notification, ja kolme konkreettista luokkaa toteuttaa Notification-käyttöliittymän. Tehdasluokka NotificationFactory luodaan Notification-objektin saamiseksi. Hypätään nyt koodaukseen.
Luo ilmoitusliittymä
public
interface
Notification {
void
notifyUser();
}
Huomautus – Yllä oleva käyttöliittymä voidaan luoda myös abstraktina luokana.
Luo kaikki toteutusluokat
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"
);
}
}
Luo tehdasluokka NotificationFactory.java konkreettisen luokan luomiseksi.
Käytä nyt tehdasluokkaa luodaksesi ja hankkiakseen konkreettisen luokan objektin välittämällä tietoja.
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
Reaaliaikaiset esimerkit
Tätä suunnittelukuviota on käytetty laajalti JDK: ssa, kuten
1. getaStance () -menetelmä java.util.Calendar-, NumberFormat- ja ResourceBundle-mallissa käyttää tehdasmenetelmän suunnittelumallia.
2. Kaikki Java-tiedostot, kuten Integer, Boolean jne., Käyttävät tätä mallia arvioidessaan arvoja valueOf () -menetelmällä.
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () on joitain esimerkkejä, joissa on käytetty tehdasmenetelmäsuunnittelumallia.
Päätelmät
Tähän mennessä olemme oppineet, mikä on tehtaan menetelmän suunnittelumalli ja miten se toteutetaan. Uskon nyt, että meillä on riittävä käsitys tämän suunnittelumekanismin eduista.