簡單工廠
首先說明,簡單工廠並不屬於23中設計模式。
學習設計模式前,首先了解簡單工廠,是程式碼設計中經常用到的。
現在有個案例如下程式碼:
// Video的抽象類
public abstract class Video {
public abstract void produce();
}
//Video的兩個實現類
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("錄製java視訊");
}
}
public class PythonVideo extends Video{
@Override
public void produce() {
System.out.println("錄製python視訊");
}
}
//客戶端
public class Test {
public static void main(String[] args) {
Video video = new JavaVideo();
video.produce();
Video video2 = new PythonVideo();
video.produce();
}
}
執行結果
錄製java視訊
錄製python視訊
問題說明:
當前程式碼客戶端對具體實現類的依賴太強。
我們用簡單工廠將其優化
//新增工廠類VideoFactory
public class VideoFactory {
public Video getVideo(String type) {
if ("java".equalsIgnoreCase(type)) {
return new JavaVideo();
} else if ("python".equalsIgnoreCase(type)) {
return new PythonVideo();
}
return null;
}
}
//修改客戶端
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new VideoFactory();
Video video = videoFactory.getVideo("java");
video.produce();
}
}
這樣就可以了,我們只需要在客戶端向工廠類傳入型別引數,就可以得到想要的物件。
但是,我們會發現,當出現一個新的Video類時,我們需要修改工廠類的方法,違背了開閉原則(對修改關閉,對擴充套件開放)。
需要進行優化,這裡我們通過反射的法方法來優化工廠方法。程式碼如下
//修改工廠類的getVideo方法
public class VideoFactory {
public Video getVideo(Class c) {
Video video = null;
try {
video = (Video)Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return video;
}
}
//修改客戶端
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new VideoFactory();
Video video = videoFactory.getVideo(JavaVideo.class);
video.produce();
}
}
這樣修改之後,我們只需要在客戶端傳入我們想要的型別class,就可以獲取到對應型別的物件,達到多型別擴充套件的目的。
相關文章
- 建立型:工廠模式-簡單工廠模式
- 工廠模式之簡單工廠模式模式
- 簡單工廠模式模式
- 簡單工廠模式和抽象工廠模式模式抽象
- 工廠模式(簡單工廠模式)快速理解模式
- 簡單工廠、工廠模式初學習模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- aardio 簡單工廠模式模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- C++ - 簡單工廠模式C++模式
- 秒懂簡單工廠模式模式
- 設計模式----簡單工廠設計模式
- 無廢話設計模式(1)--簡單工廠、工廠方法、抽象工廠設計模式抽象
- 【Java】簡單工廠模式、工廠模式、介面卡模式Java模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- 簡單工廠模式( Simple Factory Pattern )模式
- 設計模式 - 簡單工廠模式設計模式
- 【設計模式】簡單工廠模式設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 設計模式(一)—— 簡單工廠模式設計模式
- java設計模式-簡單工廠模式Java設計模式
- 設計模式之簡單工廠模式設計模式
- c#簡單工廠設計模式C#設計模式
- 掌握設計模式之簡單工廠模式設計模式
- 設計模式入門-簡單工廠模式設計模式
- 結合案例深入解析簡單工廠模式模式
- golang設計模式之簡單工廠模式Golang設計模式
- 別隻知道策略模式+簡單工廠,試試更香的策略模式+抽象工廠!模式抽象
- 設計模式學習筆記(三)簡單工廠、工廠方法和抽象工廠之間的區別設計模式筆記抽象
- 設計模式系列之一:簡單工廠模式設計模式
- 設計模式 --並不簡單的工廠模式設計模式
- Yii2設計模式——簡單工廠模式設計模式
- Java常用設計模式之簡單工廠模式Java設計模式
- 設計模式-C#實現簡單工廠模式設計模式C#
- 簡單工廠模式(simple factory)及程式碼實現模式
- 1、簡單工廠模式實現計算器功能模式