Factory method(工厂方法)是实例化对象的一种方法的名称。就象工厂一样,Factory
method的任务是创建--或制造--对象。
下面对工厂模式进行简单的讲解:
从音乐盒开始讲起,音乐盒工厂(MusicBoxFactory)生产音乐盒(PianoBox和ViolinBox),当然还可以是其它的音乐盒,这些具体的音乐盒展现给客户(MusicBoxDemo)只是一个界面(IMusicBox),客户不需要知道音乐盒的具体实现功能,只要能play()就OK。
如下图所示:客户(MusicBoxDemo)依赖音乐盒的界面,而不必知道音乐盒是如何通过音乐盒工厂(MusicBoxFactory)生产的。
从下面的图我们进入简单的代码演示阶段:
IMusicBox.java
public interface IMusicBox{
public void play();
}
PianoBox.java
public class PinoBox 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{
/***
使用java反射机制生成实例
客户端只需调用即可
方便维护和以后程序的升级扩展
*/
public static IMusicBox createMusicBox(String name)throws InstantiationException,IllegalAccessException,ClassNotFoundException{
IMusicBox musicbox=(IMusicBox)Class.forName(name).newInstance();
//在这里还可以进行一些box的内部成员变量处理
return musicbox;
}
}
MusicBoxDemo.java
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();
}
}
这样客户只需要知道音乐的界面即可,不需要知道如何生产的音乐盒。即使以后修改了Factory的生产模式,用户这里也是毫不影响。