156
技術社區[雲棲]
Design Pattern: Simple Factory 模式
學習是分享和合作式的!
轉載請注明出處:https://blog.csdn.net/wdzxl198/article/details/9219385;
文章摘自: https://www.riabook.cn/doc/designpattern/;
Simple Factory模式(又稱Static Factory模式),一個Simple Factory生產成品,而對客戶端隱藏產品產生的細節。實作時定義一個產品介麵(interface),並透過特定靜態方法來建立成品。假設有一個音樂盒工廠,購買音樂盒的客人不用知道音樂盒是如何製作的,他隻要知道如何播放音樂盒就可以了,以 UML 類別圖來表示以上的概念:
如上圖所示的,MusicBoxDemo代表了客戶的角色,它隻依賴於IMusicBox介麵,而不關心特定的實作,實際如何產生IMusicBox的實例由MusicBoxFactory完成,以一個簡單的程式來實現上麵這個UML類別圖:
- IMusicBox.java
1: public interface IMusicBox {
2: public void play();
3: }
- PianoBox.java
1: public class PianoBox implements IMusicBox {
2: public void play() {
3: System.out.println("撥放鋼琴音樂:)");
4: }
5: }
- ViolinBox.java
1: public class ViolinBox implements IMusicBox {
2: public void play() {
3: System.out.println("撥放小提琴音樂^_^");
4: }
5: }
- MusicBoxFactory.java
1: public class MusicBoxFactory {
2: public static IMusicBox createMusicBox(String name)
3: throws InstantiationException,
4: IllegalAccessException,
5: ClassNotFoundException {
6: // 這邊使用的是Java的Reflection機製來產生實例
7: // 不過客戶端不用管啦
8: // 以後就算改變了這邊的程式,客戶端程式是不用更改的
9: return (IMusicBox) Class.forName(name).newInstance();
10: }
11: }
- MusicBoxDemo.java
1: public class MusicBoxDemo {
2: public static void main(String[] args) throws Exception {
3: playMusicBox(MusicBoxFactory.createMusicBox("PianoBox"));
4: playMusicBox(MusicBoxFactory.createMusicBox("ViolinBox"));
5: }
6:
7: public static void playMusicBox(IMusicBox musicBox) {
8: musicBox.play();
9: }
10: }
來看看Simple Factory的類別結構:
客戶隻要麵對Factory,客戶依賴於產品介麵,產品的具體實作是可以與客戶隔開的,它們也是可以抽換的。
Edit bt Atlas
Time 2013/6/30 21:21
最後更新:2017-04-03 16:59:48