随笔-16  评论-0  文章-0  trackbacks-0
         Simple Factory 模式(又称Static Factory模式),一个Simple Factory 生产成品,而对客户端隐藏产品生产细节.实现定义一个产品界面(interface),并通过特定静态方法来建立成品.
         假设有一个音乐盒工厂,购买音乐盒的顾客不知道音乐盒是如何制作的,他只要知道如何播放音乐盒就可以了,以UML类图来表示以上概念.

simpleFactory-1.jpg
         如图上所示,MusicBoxDemo代表了客户的角色,它只依赖于IMusicBox界面,而不关心是如何实现的.如何产生IMusicBox由MusicBoxFactory完成.以一个简单的程序来实现上面这个UML类图:

  • IMusicBox.java
    public interface IMusicBox {
public void play();
}
  • PianoBox.java
   public class PianoBox 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 {
public static IMusicBox createMusicBox(String name)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException {
// 这边使用的是Java的Reflection机制来产生实例
// 不过客户端不用管啦
// 以后就算改变了这边的程序,客户端程序是不用更改的
return (IMusicBox) Class.forName(name).newInstance();
}
}
  • MusicBoxDemo.java
   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的类结构:
simpleFactory-2.jpg
客户只要面对Factory,客户依赖于产品介面,产品的具体实现是可以与客戶隔开的,它们也是可以抽换的.

posted on 2006-10-25 12:45 尨奇 阅读(266) 评论(0)  编辑  收藏 所属分类: DesignPattern