Simple Factory 模式(又称Static Factory模式),一个Simple Factory 生产成品,而对客户端隐藏产品生产细节.实现定义一个产品界面(interface),并通过特定静态方法来建立成品.
假设有一个音乐盒工厂,购买音乐盒的顾客不知道音乐盒是如何制作的,他只要知道如何播放音乐盒就可以了,以UML类图来表示以上概念.
如图上所示,MusicBoxDemo代表了客户的角色,它只依赖于IMusicBox界面,而不关心是如何实现的.如何产生IMusicBox由MusicBoxFactory完成.以一个简单的程序来实现上面这个UML类图:
public interface IMusicBox {
public void play();
}
public class PianoBox implements IMusicBox {
public void play() {
System.out.println("播放钢琴音乐:)");
}
}
public class ViolinBox implements IMusicBox {
public void play() {
System.out.println("播放小提琴音乐^_^");
}
}
public class MusicBoxFactory {
public static IMusicBox createMusicBox(String name)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException {
// 这边使用的是Java的Reflection机制来产生实例
// 不过客户端不用管啦
// 以后就算改变了这边的程序,客户端程序是不用更改的
return (IMusicBox) Class.forName(name).newInstance();
}
}
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的类结构:
客户只要面对Factory,客户依赖于产品介面,产品的具体实现是可以与客戶隔开的,它们也是可以抽换的.
posted on 2006-10-25 12:45
尨奇 阅读(266)
评论(0) 编辑 收藏 所属分类:
DesignPattern