ping8899 发表于 2013-2-3 14:16:44

设计模式-Simple Factory 模式

Simple Factory模式(又称Static Factory模式),一个Simple Factory生产成品,而对客户端隐藏产品产生的细节。实作时定义一个产品介面(interface),并透过特定静态方法来建立成品。

假设有一个音乐盒工厂,购买音乐盒的客人不用知道音乐盒是如何制作的,他只要知道如何播放音乐盒就可以了,MusicBoxDemo代表了客户的角色,它只依赖于IMusicBox介面,而不关心特定的实作,实际如何产生IMusicBox的实例由MusicBoxFactory完成.
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()中的实作方式,对客户端是一点影响也没有的。

客户只要面对Factory,客户依赖于产品介面,产品的具体实作是可以与客户隔开的,它们也是可以抽换的。

http://www.riabook.cn/doc/designpattern/

   
      
      <ul style="display:none;">
          <img src='http://dl.iteye.com/upload/attachment/598620/093a35c2-58fb-36ab-95dc-7edad5d083a8-thumb.jpg' class='magplus' title='点击查看原始大小图片' />

         
          大小: 17.8 KB

      </ul>
      
   
   
      

      
[*]查看图片附件
      
页: [1]
查看完整版本: 设计模式-Simple Factory 模式