学习是分享和合作式的!
转载请注明出处:http://blog.csdn.net/wdzxl198/article/details/9219385;
文章摘自: http://www.riabook.cn/doc/designpattern/;
Simple Factory模式(又称Static Factory模式),一个Simple Factory生产成品,而对客户端隐藏产品产生的细节。实作时定义一个产品介面(interface),并透过特定静态方法来建立成品。假设有一个音乐盒工厂,购买音乐盒的客人不用知道音乐盒是如何制作的,他只要知道如何播放音乐盒就可以了,以 UML 类别图来表示以上的概念:
如上图所示的,MusicBoxDemo代表了客户的角色,它只依赖于IMusicBox介面,而不关心特定的实作,实际如何产生IMusicBox的实例由MusicBoxFactory完成,以一个简单的程式来实现上面这个UML类别图:
- IMusicBox.java
1: public interface IMusicBox {
2: public void play();
3: }
- PianoBox.java
1: public class PianoBox implements IMusicBox {
2: public void play() {
3: System.out.println("拨放钢琴音乐:)");
4: }
5: }
- ViolinBox.java
1: public class ViolinBox implements IMusicBox {
2: public void play() {
3: System.out.println("拨放小提琴音乐^_^");
4: }
5: }
- MusicBoxFactory.java
1: public class MusicBoxFactory {
2: public static IMusicBox createMusicBox(String name)
3: throws InstantiationException,
4: IllegalAccessException,
5: ClassNotFoundException {
6: // 这边使用的是Java的Reflection机制来产生实例
7: // 不过客户端不用管啦
8: // 以后就算改变了这边的程式,客户端程式是不用更改的
9: return (IMusicBox) Class.forName(name).newInstance();
10: }
11: }
- MusicBoxDemo.java
1: public class MusicBoxDemo {
2: public static void main(String[] args) throws Exception {
3: playMusicBox(MusicBoxFactory.createMusicBox("PianoBox"));
4: playMusicBox(MusicBoxFactory.createMusicBox("ViolinBox"));
5: }
6:
7: public static void playMusicBox(IMusicBox musicBox) {
8: musicBox.play();
9: }
10: }
来看看Simple Factory的类别结构:
客户只要面对Factory,客户依赖于产品介面,产品的具体实作是可以与客户隔开的,它们也是可以抽换的。
Edit bt Atlas
Time 2013/6/30 21:21