更新時間:2022-08-09 10:41:16 來源:動力節點 瀏覽1048次
它是一種關于創建對象的創建設計模式。工廠設計模式說定義一個接口(Java接口或抽象類)來創建對象,讓子類決定實例化哪個類。接口中的工廠方法允許類將實例化推遲到一個或多個具體子類。由于這些設計模式談論對象的實例化,因此它屬于創建設計模式的范疇。如果我們注意到名稱工廠方法,這意味著有一個方法是工廠,一般來說,工廠涉及創建的東西,在這里,一個對象正在被創建。這是創建對象的最佳方法之一,其中對象創建邏輯對客戶端隱藏。現在讓我們看一下實現。
在接口內定義工廠方法。
讓子類實現上述工廠方法,并決定創建哪個對象。
在 Java 中,構造函數不是多態的,但通過允許子類創建對象,我們將多態行為添加到實例化中。簡而言之,我們試圖通過讓子類決定創建什么來實現偽多態,因此這個工廠方法也稱為虛擬構造函數。
讓我們嘗試用一個實時問題和一些編碼練習來實現它。
問題陳述: 考慮我們想要通過電子郵件、短信和推送通知實現通知服務。讓我們嘗試在工廠方法設計模式的幫助下實現這一點。首先,我們將為此設計一個 UML 類圖。
在上面的類圖中,我們有一個名為Notification的接口,三個具體的類正在實現 Notification 接口。創建工廠類 NotificationFactory 以獲取 Notification 對象。現在讓我們進入編碼。
public interface Notification {
void notifyUser();
}
注意 - 上面的接口也可以創建為抽象類。
SMSNotification.java
public class SMSNotification implements Notification {
@Override
public void notifyUser()
{
// TODO Auto-generated method stub
System.out.println("Sending an SMS notification");
}
}
電子郵件通知.java
public class EmailNotification implements Notification {
@Override
public void notifyUser()
{
// TODO Auto-generated method stub
System.out.println("Sending an e-mail notification");
}
}
PushNotification.java
public class PushNotification implements Notification {
@Override
public void notifyUser()
{
// TODO Auto-generated method stub
System.out.println("Sending a push notification");
}
}
public class NotificationFactory {
public Notification createNotification(String channel)
{
if (channel == null || channel.isEmpty())
return null;
switch (channel) {
case "SMS":
return new SMSNotification();
case "EMAIL":
return new EmailNotification();
case "PUSH":
return new PushNotification();
default:
throw new IllegalArgumentException("Unknown channel "+channel);
}
}
}
現在讓我們使用工廠類通過傳遞一些信息來創建和獲取具體類的對象。
public class NotificationService {
public static void main(String[] args)
{
NotificationFactory notificationFactory = new NotificationFactory();
Notification notification = notificationFactory.createNotification("SMS");
notification.notifyUser();
}
}
輸出:發送短信通知
這種設計模式在JDK中已經被廣泛使用,例如
1. java.util.Calendar、NumberFormat、ResourceBundle的getInstance()方法采用工廠方法設計模式。
2. Java 中的所有包裝類,如 Integer、Boolean 等,都使用這種模式來使用 valueOf() 方法評估值。
3. java.nio.charset.Charset.forName()、java.sql.DriverManager#getConnection()、java.net.URL.openConnection()、java.lang.Class.newInstance()、java.lang.Class。 forName() 是使用工廠方法設計模式的一些示例。
以上就是關于“什么是Java工廠方法設計模式”的介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容從入門到精通,細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習