GeeksforGeeks (Svenska)
Det är ett skapande designmönster som talar om skapandet av ett objekt. Fabriksdesignmönstret säger att definiera ett gränssnitt (Ett Java-gränssnitt eller en abstrakt klass) och låta underklasserna bestämma vilket objekt som ska instansieras. Fabriksmetoden i gränssnittet låter en klass skjuta upp momentiseringen till en eller flera konkreta underklasser. Eftersom detta designmönster talar om instantiering av ett objekt och så faller det under kategorin skapande designmönster. Om vi märker namnet Fabriksmetod betyder det att det finns en metod som är en fabrik och i allmänhet är fabriker involverade i skapande saker och här skapas ett objekt. Det är ett av de bästa sätten att skapa ett objekt där objektskapande logik är dold för klienten. Låt oss nu titta på implementeringen.
Implementering:
1. Definiera en fabriksmetod i ett gränssnitt.
2. Låt underklassen implementera ovanstående fabriksmetod och bestämma vilket objekt du vill skapa.
I Java-konstruktörer är inte polymorfa, men genom att tillåta underklass att skapa ett objekt lägger vi till polymorft beteende till instantieringen. Kort sagt, vi försöker uppnå Pseudo-polymorfism genom att låta underklassen bestämma vad som ska skapas, och så kallas denna Factory-metod också som
Virtuell konstruktör. Låt oss försöka implementera det med ett realtidsproblem och lite kodningsövning.
Problemförklaring:
Tänk på att vi vill implementera en aviseringstjänst via e-post, SMS och push-avisering. Låt oss försöka implementera detta med hjälp av fabriksmetodens designmönster. Först ska vi utforma ett UML-klassdiagram för detta.
I klassdiagrammet ovan har vi ett gränssnitt som kallas Notification och tre konkreta klasser implementerar Notification interface. En fabriksklass NotificationFactory skapas för att få ett Notification-objekt. Låt oss hoppa in i kodningen nu.
Skapa meddelandegränssnitt
public
interface
Notification {
void
notifyUser();
}
Obs – Ovanstående gränssnitt kan skapas som en abstrakt klass också.
Skapa alla implementeringsklasser
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"
);
}
}
Skapa en fabriksklass NotificationFactory.java för att initiera betongklass.
Låt oss nu använda fabriksklass för att skapa och få ett objekt av konkret klass genom att skicka lite information.
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
Exempel i realtid
Detta designmönster har använts i stor utsträckning i JDK, till exempel
1. getInstance () -metoden för java.util.Calendar, NumberFormat och ResourceBundle använder designmönster för fabriksmetoder.
2. Alla omslagsklasser som Integer, Boolean etc i Java använder detta mönster för att utvärdera värdena med metoden valueOf ().
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () är några av exemplen där mönster för design av fabriksmetoder har använts.
Slutsats
Hittills har vi lärt oss vad som är fabriksmetodsmönster och hur man implementerar det. Jag tror att vi nu har en rättvis förståelse av fördelen med denna designmekanism.