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


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


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反射機(jī)制生成實(shí)例
客戶端只需調(diào)用即可
方便維護(hù)和以后程序的升級(jí)擴(kuò)展
*/
public static IMusicBox createMusicBox(String name)throws InstantiationException,IllegalAccessException,ClassNotFoundException{
IMusicBox musicbox=(IMusicBox)Class.forName(name).newInstance();
//在這里還可以進(jìn)行一些box的內(nèi)部成員變量處理
return musicbox;
}
}
MusicBoxDemo.java/***
使用java反射機(jī)制生成實(shí)例
客戶端只需調(diào)用即可
方便維護(hù)和以后程序的升級(jí)擴(kuò)展
*/
public static IMusicBox createMusicBox(String name)throws InstantiationException,IllegalAccessException,ClassNotFoundException{
IMusicBox musicbox=(IMusicBox)Class.forName(name).newInstance();
//在這里還可以進(jìn)行一些box的內(nèi)部成員變量處理
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();
}
}
這樣客戶只需要知道音樂的界面即可,不需要知道如何生產(chǎn)的音樂盒。即使以后修改了Factory的生產(chǎn)模式,用戶這里也是毫不影響。
posted on 2008-12-14 22:57 草原上的駱駝 閱讀(407) 評(píng)論(0) 編輯 收藏 所屬分類: 設(shè)計(jì)模式-DP