隨筆-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 尨奇 閱讀(281) 評論(0)  編輯  收藏 所屬分類: DesignPattern
          主站蜘蛛池模板: 大方县| 同江市| 施秉县| 阳泉市| 廊坊市| 枞阳县| 巴彦淖尔市| 洞头县| 建水县| 潢川县| 红桥区| 乌鲁木齐市| 漳平市| 大渡口区| 鲜城| 双城市| 云南省| 六枝特区| 桃江县| 宽甸| 巫山县| 新余市| 景谷| 弥渡县| 信丰县| 元氏县| 当阳市| 改则县| 南涧| 尤溪县| 伊通| 颍上县| 吉木萨尔县| 清丰县| 富源县| 甘肃省| 襄城县| 彭州市| 石棉县| 尼玛县| 平果县|