細心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業(yè),五六點粗墨,七八筆買賣,九十道人情。

          BlogJava 聯(lián)系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
          Simple Factory模式(又稱Static Factory模式),一個Simple Factory生產(chǎn)成品,而對客戶端隱藏產(chǎn)品產(chǎn)生的細節(jié)。實作時定義一個產(chǎn)品介面(interface),並透過特定靜態(tài)方法來建立成品。

          假設(shè)有一個音樂盒工廠,購買音樂盒的客人不用知道音樂盒是如何製作的,他只要知道如何播放音樂盒就可以了,以 UML 類別圖來表示以上的概念:
          SimpleFactory
          如上圖所示的,MusicBoxDemo代表了客戶的角色,它只依賴於IMusicBox介面,而不關(guān)心特定的實作,實際如何產(chǎn)生IMusicBox的實例由MusicBoxFactory完成,以一個簡單的程式來實現(xiàn)上面這個UML類別圖:
          • IMusicBox.java
          public interface IMusicBox {
          public void play();
          }

          • PianoBox.java
          public class PianoBox implements IMusicBox {
          public void play() {
          System.out.println("撥放鋼琴音樂:)");
          }
          }

          • ViolinBox.java
          public class ViolinBox implements IMusicBox {
          public void play() {
          System.out.println("撥放小提琴音樂^_^");
          }
          }

          • MusicBoxFactory.java
          public class MusicBoxFactory {
          public static IMusicBox createMusicBox(String name)
          throws InstantiationException,
          IllegalAccessException,
          ClassNotFoundException {
          // 這邊使用的是Java的Reflection機制來產(chǎn)生實例
          // 不過客戶端不用管啦
          // 以後就算改變了這邊的程式,客戶端程式是不用更改的
          return (IMusicBox) Class.forName(name).newInstance();
          }
          }

          • MusicBoxDemo.java
          public class MusicBoxDemo {
          public static void main(String[] args) throws Exception {
          playMusicBox(MusicBoxFactory.createMusicBox("PianoBox"));
          playMusicBox(MusicBoxFactory.createMusicBox("ViolinBox"));
          }

          public static void playMusicBox(IMusicBox musicBox) {
          musicBox.play();
          }
          }

          由於客戶端只依賴於IMusicBox介面,所以即使您日後改變了createMusicBox()中的實作方式,對客戶端是一點影響也沒有的。

          來看看Simple Factory的類別結(jié)構(gòu):
          SimpleFactory

          客戶只要面對Factory,客戶依賴於產(chǎn)品介面,產(chǎn)品的具體實作是可以與客戶隔開的,它們也是可以抽換的。

          posted on 2007-04-16 17:39 張金鵬 閱讀(230) 評論(0)  編輯  收藏 所屬分類: Creational 模式
          主站蜘蛛池模板: 宁南县| 清丰县| 琼海市| 建瓯市| 广河县| 临桂县| 哈尔滨市| 彩票| 天台县| 河南省| 惠州市| 大渡口区| 深泽县| 崇礼县| 榆树市| 鄂伦春自治旗| 常德市| 颍上县| 顺平县| 贺兰县| 南乐县| 安达市| 五家渠市| 晋宁县| 沈阳市| 巫溪县| 枣强县| 甘肃省| 东海县| 都江堰市| 长治市| 慈利县| 原平市| 柘城县| 西安市| 绥德县| 洛南县| 拉萨市| 开阳县| 平果县| 西昌市|