细心!用心!耐心!

吾非文人,乃市井一俗人也,读百卷书,跨江河千里,故申城一游; 一两滴辛酸,三四年学业,五六点粗墨,七八笔买卖,九十道人情。

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

假設有一個音樂盒工廠,購買音樂盒的客人不用知道音樂盒是如何製作的,他只要知道如何播放音樂盒就可以了,以 UML 類別圖來表示以上的概念:
SimpleFactory
如上圖所示的,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

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

posted on 2007-04-16 17:39 张金鹏 阅读(215) 评论(0)  编辑  收藏 所属分类: Creational 模式

只有注册用户登录后才能发表评论。


网站导航: