在 Java 中使用泛型實現工廠模式
瀏覽人數:331最近更新:
一、概述
在本教程中,我們將學習如何在 Java 中使用泛型實現工廠模式。
2. 什麼是工廠模式?
在面向對象編程中,工廠模式是一種創建型設計模式,負責在調用對象時創建對象。
工廠是一個類,它通過方法調用創建原型類(也稱為接口)的對象:
當我們想要創建一個通用接口的對象同時對用戶隱藏創建邏輯時,工廠模式是很好的。
3.它是如何實現的?
現在讓我們學習如何實現它。首先,我們看一下類圖:
現在讓我們實現圖中的每個類。
3.1。實現Notifier
接口
Notifier
接口是一個原型,其他通知器類實現它:
public interface Notifier<T> {
void notify(T obj);
}
正如我們所見, Notifier
類是一個泛型類,它有一個名為notify
的方法。
3.2.實現Notifier
類
現在讓我們實現另外兩個通知類:
public class StringNotifier implements Notifier<String> {
@Override
public void notify(String str) {
System.out.println("Notifying: " + str);
}
}
現在我們有兩個使用Notifier
接口的類——一個輸出簡單的文本,一個發布日期。
3.3.實現工廠
每次調用其唯一方法getNotifier()
時,工廠類都會生成一個通知程序實例:
public class NotifierFactory {
public <T> Notifier<T> getNotifier(Class<T> c) {
if (c == String.class) {
return Record.STRING.make();
}
if (c == Date.class) {
return Record.DATE.make();
}
return null;
}
}
在上面的代碼中, Record
是一個枚舉,其中包含兩個名為STRING
和DATE
的常量。
3.4.實施Record
Record
枚舉保存有效通知類的記錄,並在工廠類每次調用它時創建一個實例:
public enum Record {
STRING {
@Override
public Notifier<String> make() {
return new StringNotifier();
}
},
DATE {
@Override
public Notifier<Date> make() {
return new DateNotifier();
}
};
public abstract <T> Notifier<T> make();
}
我們已經成功實現了工廠模式。
4.使用工廠
讓我們在Main
類中使用工廠:
public static void main(String[] args) {
NotifierFactory factory = new NotifierFactory();
Notifier<String> stringNotifier = factory.getNotifier(String.class);
Notifier<Date> dateNotifier = factory.getNotifier(Date.class);
stringNotifier.notify("Hello world!");
dateNotifier.notify(new Date());
}
現在我們應該編譯並運行我們的代碼:
$ javac Main.java
$ java Main
Notifying: Hello world!
Notifying: Wed Oct 19 17:36:38 TRT 2022
正如我們所見,工廠成功地創建了兩個適當類型的通知程序實例。
五、總結
在本文中,我們學習瞭如何在 Java 中實現和使用工廠模式。
與往常一樣,源代碼可在 GitHub 上獲得。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議