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 类别图来表示以上的概念:

如上图所示的,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的类别结构:

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

Edit bt Atlas

Time 2013/6/30 21:21

时间: 2024-09-18 22:24:09

Design Pattern: Simple Factory 模式的相关文章

Design Pattern: Abstract Factory 模式

原文地址:http://www.riabook.cn/doc/designpattern/AbstractFactory.htm 假设您要制作一个对话方块(Dialog)元件,您希望的是这个对话方块可以有不同的视感(Look-and- feel),最基本的想法是,藉由Setter将不同视感的元件设定给这个对话方块,例如: CustomDialog.java public class CustomDialog { private IButton button; private ITextField

设计模式--Simple Factory 模式

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

Design Pattern: Template Method 模式

  学习是分享和合作式的! 转载请注明出处:http://blog.csdn.net/wdzxl198/article/details/9223275: 文章摘自: http://www.riabook.cn/doc/designpattern/: 不要将设计模式想得高不可攀,好像高手才会使用的东西,事实上如果您在下手程式之前,能稍稍对程式作个分析规划,或多或少都会用到一些模式了,模式不是教条,它只是前人的经验成果,而 Gof 的书则是择前人之精华持续改进而来罢了. Template Metho

Design Pattern: Default Adapter 模式

在Java中如果要定义事件处理的方式,必须实作EventListener的子介面,例如实作 WindowListener来定义一些视窗事件的处理方式,WindowListener中定义了七个方法: public interface WindowListener extends EventListener { public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void

设计模式之简单工厂模式(Simple Factory Pattern)

设计 工厂模式 THE FACTORY PATTERN 在面向对象(OO)程序中,我们经常看到的一种模式就是简单工厂模式(Simple Factory Pattern).简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的认为不同,而且根据不同的数据进行了优化.简单工厂模式实际上不属于23个GOF模式,但它可以作为工厂方法模式(FACTORY Method)的一个引导. 工厂模式如何工作 为了便于理解简单工厂模式,可以看下

.Net设计模式之简单工厂模式(Simple Factory Pattern)

一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖 二.解决的问题(What To Solve) 客户实例化对象时不需要关心该对象是由哪个子类实例化的. 三.简单工厂模式分析(Analysis) 1.简单工厂模式结构 IProduct接口:抽象产品类 ConcreteProduct类:产品类的具体实现 Simp

Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern

   Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程概念,因而很多行内人把FP又称为Monadic Programming.这其中透露的Monad重要性则不言而喻.Scalaz是通过Monad typeclass为数据运算的程序提供了一套规范的编程方式,如常见的for-comprehension.而不同类型的Monad实例则会支持不同的程序运算行为,如:Option Monad在运算中如果遇到None值则会中途退出:St

Design Pattern: Prototype 模式

  学习是分享和合作式的! 转载请注明出处:http://blog.csdn.net/wdzxl198/article/details/9271773: 文章摘自: http://www.riabook.cn/doc/designpattern/: 您从图书馆的期刊从发现了几篇您感兴趣的文章,由于这是图书馆的书,您不可以直接在书中作记号或写字,所以您将当中您所感兴趣的几个主题影印出来,这下子您就可在影印的文章上画记重点. Prototype模式的作用有些类似上面的描述,您在父类别中定义一个clo

C# Design Patterns (1) - Factory Method

Simple Factory Pattern (简单工厂模式) 特性: 把类的实例化工作,集中到一个「工厂类」去处理,亦即将 new instance 的工作,都交给一个「工厂」去处理,而不要分散写在各个类中.客户端程序,与创建实例 (对象) 的工作必须隔离,亦即「解耦」,客户端程序只要专注于自己的业务逻辑.适用于客户端程序在开发过程中,尚无法预知要创建的具体类型.产品具体的实现能和客户端隔离,便于事后抽换. Simple Factory Pattern (简单工厂模式).Factory Met