Design Pattern: Simple Factory 模式

简介:

  学习是分享和合作式的!

转载请注明出处:http://blog.csdn.net/wdzxl198/article/details/9219385

文章摘自: http://www.riabook.cn/doc/designpattern/;   

     Simple Factory模式(又称Static Factory模式),一个Simple Factory生产成品,而对客户端隐藏产品产生的细节。实作时定义一个产品介面(interface),并透过特定静态方法来建立成品。
假设有一个音乐盒工厂,购买音乐盒的客人不用知道音乐盒是如何制作的,他只要知道如何播放音乐盒就可以了,以 UML 类别图来表示以上的概念:

SimpleFactory

如上图所示的,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: }
由于客户端只依赖于IMusicBox介面,所以即使您日后改变了createMusicBox()中的实作方式,对客户端是一点影响也没有的。
来看看Simple Factory的类别结构:

SimpleFactory

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

Edit bt Atlas

Time 2013/6/30 21:21

目录
相关文章
|
缓存 Ubuntu Java
‘settings.xml’ has syntax errors less… 和Parent ‘org.springframework.boot’has problems less…的问题解决
‘settings.xml’ has syntax errors less… 和Parent ‘org.springframework.boot’has problems less…的问题解决
457 0
‘settings.xml’ has syntax errors less… 和Parent ‘org.springframework.boot’has problems less…的问题解决
|
C#
艾伟:C# Design Patterns (1) - Factory Method
Simple Factory Pattern (简单工厂模式) 特性: 把类的实例化工作,集中到一个「工厂类」去处理,亦即将 new instance 的工作,都交给一个「工厂」去处理,而不要分散写在各个类中。
887 0
|
C#
艾伟_转载:C# Design Patterns (1) - Factory Method
Simple Factory Pattern (简单工厂模式) 特性: 把类的实例化工作,集中到一个「工厂类」去处理,亦即将 new instance 的工作,都交给一个「工厂」去处理,而不要分散写在各个类中。
990 0