定义:

定义一个工厂类,它可以根据参数的不同生成对应的类的实例;被创建的类的实例通常有相同的父类。因为该工厂方法尝尝是静态的,所以又被称为静态工厂方法(Static Factory Method)

结构图:

  • Factory:工厂类,工厂模式的核心。负责创建所有产品实例的内部逻辑,被外界直接调用,返回抽象类Product.
  • Product:抽象产品类,封装了各种产品的公有方法,利于提高系统的可扩展性。
  • ConcreteProduct:具体产品类,工厂创建目标。继承或实现了抽象产品类的抽象方法,含有具体产品功能的执行逻辑。

注意:

  • 传统情况下客户端会直接调用工厂类的静态方法,并指定对应的参数。如果需要更改对应的产品,则需要重新变音。因此可以考虑引入配置文件来指定具体产品类。
  • 有时为了简化,可以将抽象产品类和工厂类合并,在抽象产品类中实现静态工厂方法。

优点:

  • 工厂类将对象的创建和使用分类开来,符合了单一职责原则。
  • 客户端无序知道具体产品的类名,只需要知道具体产品类对应的参数即可,隐藏了具体产品创建的细节。
  • 通过配置文件,可以在不修改客户端代码的情况下更换和增加新的具体产品类。

缺点:

  • 工厂类集中了所有的具体产品创建的职责,一旦不能使用,整个系统将无法使用。
  • 如果添加新类,则需要修改工厂类,当产品类型多时,不利于整个系统的扩展和维护。
  • 使用了静态方法,造成工厂角色无法形成基于继承的等级结构。

适用场景:

  • 具体产品类的数目比较少,创建逻辑比较简单。
  • 客户端只需要知道传入工厂的参数,对于如何创建对象并不关心。

实例:

SimpleFactoryPattern.java

六个创建模式之简单工厂模式(Simple Factory Pattern)的更多相关文章

  1. 设计模式学习之简单工厂(Simple Factory,创建型模式)(1)

    简单工厂(Simple Factory,创建型模式) 第一步: 比如我们要采集苹果和香蕉,那么我们需要创建一个Apple类和Banana类,里面各自有采集方法get(),然后通过main方法进行调用, ...

  2. 设计模式的征途—2.简单工厂(Simple Factory)模式

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...

  3. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  4. C++设计模式 ==> 策略模式与简单工厂模式结合

    简介 策略模式相较之于简单工厂模式适用于生产方法经常变化且方法较为繁多的情况,因为生产方法时常变化就会需要频繁修改工厂类,违背了开闭原则,这时就可以用策略选择类由客户端根据需求动态切换策略.且策略模式 ...

  5. 简单工厂(Simple Factory)模式

    工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(F ...

  6. 设计模式之策略模式&简单工厂模式

    学习设计模式已经有非常长一段时间了,事实上先前已经敲过一遍了.可是老认为没有学到什么,认识也不够深刻.如今趁着重构机房,再又一次来过,也不晚. 事实上在敲了机房之后,看看模式,事实上,曾经非常难理解. ...

  7. 设计模式--简单工厂(Simple Factory)

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...

  8. 简单工厂设计模式(Simple Factory Design Pattern)

    [引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...

  9. 设计模式(Java版)-创建型模式之简单工厂模式

    前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...

  10. Java设计模式(1)——创建型模式之简单工厂模式(Simple Factory)

    设计模式系列参考: http://www.cnblogs.com/Coda/p/4279688.html 一.概述 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高 ...

随机推荐

  1. 浅析 mondrian 模式文件 Schema

    1.前言 前面几篇文章一经介绍过saiku.模式文件和MDX的关系.通俗点说模式文件(Schema)就是一个xml,里面定义了一个虚拟立方体,共MDX查询语言使用. 2.模式文件 Schema 最顶层 ...

  2. js日期时间比较函数

    转自:http://www.cnblogs.com/zxjyuan/archive/2010/09/07/1820708.html js日期比较(yyyy-mm-dd) function duibi( ...

  3. MxNet Windows下安装

    项目链接:https://github.com/dmlc/mxnet 因为要做一些开发工作,prebuilt的lib不能满足需求.由于工作环境要求是windows,所以可以利用cmake工具来构建. ...

  4. 你还在问android横竖屏切换的生命周期?

    本文原创,转载请注明来自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题. ...

  5. MFC的消息管理

    一般而言,与视图状态和用户输入有关的命令由视图类来处理,与文件操作有关的命令由文档类来处理,与窗口布局有关的命令由主框架类来处理,与程序的运行状态有关的命令由APP类来处理.

  6. [转] VB之Val()函数的使用

    在VB中,也许你或多或少会希望得到的数据转换成数字类型,数字类型既可以是整形,单精度,双精度,浮点数,只要是数字类型这个都可以使用,不过此函数只返回字符串中包含的数字,若第一个字符为字母或者非数字字符 ...

  7. C++输入输出

    i. C++如何输入一行,按回车键结束 #include <sstream>1 getline(cin, line); istringstream input(line); ii. C++ ...

  8. MDX 占比同比环比

    http://blog.csdn.net/hero_hegang/article/details/9072889

  9. zepto - reduce

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce var ss ...

  10. Vectoroid

    Use cases Drawing (sketch, illustrations, cartooning, etc). Diagramming (any sort of chart with obje ...