JAVA設計模式之-簡單工廠模式(Simplae Factory)
Factory method(工廠方法)是實例化對象的一種方法的名稱。就象工廠一樣,Factory
method的任務是創建--或制造--對象。
下面對工廠模式進行簡單的講解:
從音樂盒開始講起,音樂盒工廠(MusicBoxFactory)生產音樂盒(PianoBox和ViolinBox),當然還可以是其它的音樂盒,這些具體的音樂盒展現給客戶(MusicBoxDemo)只是一個界面(IMusicBox),客戶不需要知道音樂盒的具體實現功能,只要能play()就OK。
如下圖所示:客戶(MusicBoxDemo)依賴音樂盒的界面,而不必知道音樂盒是如何通過音樂盒工廠(MusicBoxFactory)生產的。
從下面的圖我們進入簡單的代碼演示階段:


IMusicBox.java
ViolinBox.java
這樣客戶只需要知道音樂的界面即可,不需要知道如何生產的音樂盒。即使以后修改了Factory的生產模式,用戶這里也是毫不影響。
下面對工廠模式進行簡單的講解:
從音樂盒開始講起,音樂盒工廠(MusicBoxFactory)生產音樂盒(PianoBox和ViolinBox),當然還可以是其它的音樂盒,這些具體的音樂盒展現給客戶(MusicBoxDemo)只是一個界面(IMusicBox),客戶不需要知道音樂盒的具體實現功能,只要能play()就OK。
如下圖所示:客戶(MusicBoxDemo)依賴音樂盒的界面,而不必知道音樂盒是如何通過音樂盒工廠(MusicBoxFactory)生產的。
從下面的圖我們進入簡單的代碼演示階段:


IMusicBox.java
public interface IMusicBox{
public void play();
}
PianoBox.javapublic void play();
}
public class PinoBox implements IMusicBox{
public void play(){
System.out.println("播放鋼琴音樂");
}
}
public void play(){
System.out.println("播放鋼琴音樂");
}
}
ViolinBox.java
public class ViolinBox implements IMusicBox{
public void play(){
System.out.println("播放小提琴音樂");
}
}
MusicBoxFactory.javapublic void play(){
System.out.println("播放小提琴音樂");
}
}
public class MusicBoxFactory{
/***
使用java反射機制生成實例
客戶端只需調用即可
方便維護和以后程序的升級擴展
*/
public static IMusicBox createMusicBox(String name)throws InstantiationException,IllegalAccessException,ClassNotFoundException{
IMusicBox musicbox=(IMusicBox)Class.forName(name).newInstance();
//在這里還可以進行一些box的內部成員變量處理
return musicbox;
}
}
MusicBoxDemo.java/***
使用java反射機制生成實例
客戶端只需調用即可
方便維護和以后程序的升級擴展
*/
public static IMusicBox createMusicBox(String name)throws InstantiationException,IllegalAccessException,ClassNotFoundException{
IMusicBox musicbox=(IMusicBox)Class.forName(name).newInstance();
//在這里還可以進行一些box的內部成員變量處理
return musicbox;
}
}
public class MusicBoxDemo{
public static void main(String[] args)throws Exception{
PlayMusicBox(MusicBoxFactory.createMusicBox("PianoBox")
);
PlayMusicBox(MusicBoxFactory.createMusicBox("VolinBox")
);
}
public static void PlayMusicBox(IMusicBox imusicbox){
imusicbox.play();
}
}
public static void main(String[] args)throws Exception{
PlayMusicBox(MusicBoxFactory.createMusicBox("PianoBox")
);
PlayMusicBox(MusicBoxFactory.createMusicBox("VolinBox")
);
}
public static void PlayMusicBox(IMusicBox imusicbox){
imusicbox.play();
}
}
這樣客戶只需要知道音樂的界面即可,不需要知道如何生產的音樂盒。即使以后修改了Factory的生產模式,用戶這里也是毫不影響。
posted on 2008-12-14 22:57 草原上的駱駝 閱讀(402) 評論(0) 編輯 收藏 所屬分類: 設計模式-DP