隨筆-16  評論-0  文章-0  trackbacks-0
          ?????????Simple Factory 模式(又稱Static Factory模式),一個Simple Factory 生產成品,而對客戶端隱藏產品生產細節.實現定義一個產品界面(interface),并通過特定靜態方法來建立成品.
          ?????????假設有一個音樂盒工廠,購買音樂盒的顧客不知道音樂盒是如何制作的,他只要知道如何播放音樂盒就可以了,以UML類圖來表示以上概念.

          simpleFactory-1.jpg
          ?????????如圖上所示,MusicBoxDemo代表了客戶的角色,它只依賴于IMusicBox界面,而不關心是如何實現的.如何產生IMusicBox由MusicBoxFactory完成.以一個簡單的程序來實現上面這個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機制來產生實例
          // 不過客戶端不用管啦
          // 以后就算改變了這邊的程序,客戶端程序是不用更改的
          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的類結構:
          simpleFactory-2.jpg
          客戶只要面對Factory,客戶依賴于產品介面,產品的具體實現是可以與客戶隔開的,它們也是可以抽換的.

          posted on 2006-10-25 12:45 尨奇 閱讀(277) 評論(0)  編輯  收藏 所屬分類: DesignPattern
          主站蜘蛛池模板: 泰宁县| 库车县| 西青区| 自治县| 安仁县| 尉犁县| 黄大仙区| 垣曲县| 芜湖县| 如皋市| 友谊县| 周宁县| 宁化县| 陈巴尔虎旗| 缙云县| 镇宁| 兴宁市| 周宁县| 塔城市| 义乌市| 嵩明县| 宣武区| 云梦县| 兴和县| 汉中市| 龙江县| 漳浦县| 策勒县| 滦平县| 罗源县| 罗田县| 增城市| 郧西县| 四会市| 申扎县| 万山特区| 宜宾市| 垦利县| 海盐县| 鸡泽县| 莫力|