简单工厂模式

原创 2013年12月04日 09:50:29

文章摘抄自网络

 

工厂模式是类的创建模式,又叫做虚拟构造(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。

工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

 

工厂模式在《Java与模式》中分为三类:

1)简单工厂模式(Simple Factory):不利于产生系列产品;

2)工厂方法模式(Factory Method):又称为多形性工厂;

3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;

             这三种模式从上到下逐步抽象,并且更具一般性。

             GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

 

一、简单工厂模式

简单工厂模式是类的创建模式,又叫静态工厂方法模式(负责创建一般产品的类事例用的是一个静态方法)。

这里有三个基本的图形,Circle,Square,Triangle而每个基本的图形都有被画和被被擦出的方法,接口Shape就定义了所有图形都同用的这两个方法,ArtTracer类提供了一个静态工厂方法,在客户端调用的情况下,返回客户端所需要的类事例,其他的代码都比较简单,这里只给出ArtTracer类的代码:

 

public class ArtTracer {
    public static Shape factory(String witch) throw BadShapeException{
        if(wicth.equals("Circle"){
            return new Circle();
        }
        else if(wicth.equals("Square"){
            return new Square();
        }
        else if(wicth.equals("Triangle"){
            return new Triangle();       
        }else{
            throw new BadShapeException(witch);
        }
    }
}

public class BadShapeException extends Exception{
   public BdaShapeException(String witch){
	  super(witch);
   }
}

 

从上面的代码可以看出,在客户端使用的时候你只要去调用ArtTrace类的工厂方法,返回你想要的类的事例,而不需要关心内部实现以及这个类事例到底是怎样生成的,当你所调用的图形是系统不支持的时候,将会给你抛出一个异常,简单工厂模式是根据传入的参数来决定到底应该创建那个类的事例出来。下图是简单工厂模式的一般结构:

 

 

由上图可以看出,简单工厂模式由,工厂角色,抽象产品角色,产品角色,这三部分:

工厂角色:这是工厂方法模式的核心,但客户段调用他的工厂方法的时候,返回给客户端的是产品角色的一个类事例。

抽象产品角色:定义了产品角色所共有的共性,通常由一个java接口或者是一个java抽象类。如果具体产品之间没有共同的商业逻辑,就用java接口,如果有共同的商业逻辑,就用一个java抽象类。

产品角色:简单工厂方法所创建的任何一个对象都是这个角色的一个类事例。

 

角色之间是可以相互合并的,例如三个角色合并成一个,就好象单例模式,单例模式自身是自己的工厂角色,但并不完全等同于单例模式,单例模式中的构造方法是私有的。

简单工厂模式的缺点是当在产品角色中再增加一个类的时候,工厂方法必须有发生响应的改变,这就导致了扩展性,不符合开-闭原则。

 

 

  • 8ff55f74-2052-31a6-952b-920084d79294-thumb.jpg
  • 大小: 27.1 KB
  • 8bea9658-05b3-3bac-b222-f22c28ee8ea2-thumb.jpg
  • 大小: 13.8 KB

C++ 设计模式之——简单工厂模式(SimpleFactoryPattern)

简单工厂模式   简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建...
  • nie2314550441
  • nie2314550441
  • 2016年02月18日 17:40
  • 412

java工厂模式——简单工厂模式

当A对象需要调用B对象的方法是,许多初学者会选择使用new关键字来创建一个B实例,然后调用B实例的方法。从语法角度来看,这种做法没有任何问题,这种做法的坏处在于:A类的方法实现直接调用了B类的类名(这...
  • huang_xw
  • huang_xw
  • 2012年06月16日 16:31
  • 5898

C# 简单工厂设计模式

简单工厂设计模式: C#- 简单工厂模式   一、   简单工厂( Simple Factory )模式   Simple Fa...
  • u013799020
  • u013799020
  • 2014年06月24日 00:39
  • 430

工厂方法模式VS简单工厂模式

One----简单工厂模式: 一,基本知识: (1)定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。(2)理...
  • qq_28055429
  • qq_28055429
  • 2016年06月10日 23:14
  • 1540

简单工厂模式(C++描述)

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。 1.静态工厂方法统一管理对象...
  • chollima
  • chollima
  • 2009年03月12日 22:43
  • 17045

javascript设计模式--简单工厂模式

简单工厂模式(simple Factory):又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。 举个例子,比如说体育商品店卖体育器材,里面有很多体育用品,及其...
  • sinat_29843547
  • sinat_29843547
  • 2016年04月12日 10:47
  • 588

简单工厂模式的java实现例子

简单工厂模式是属于创建型模式,又叫做静态工厂方法模式。 它的实现方式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 简单工厂模式由三种角色组成: ...
  • pnjlc
  • pnjlc
  • 2016年09月26日 16:29
  • 1658

简单工厂模式的UML类图与源码实现

原文:http://hlzhou.iteye.com/blog/551492 源码:Operation类 Java代码   package O...
  • lan861698789
  • lan861698789
  • 2014年02月28日 21:03
  • 2346

java 简单工厂模式(实现一个计算器)

package com.simpleFactory; /** * 运算类 * @author Administrator * */ public class Operation { ...
  • greatmind829
  • greatmind829
  • 2012年06月29日 16:37
  • 4285

代码设计模式之简单工厂模式(Factory)

简单工厂模式 核心思想是用一个工厂来根据输入的条件产生不同的类,(返回父类接口或抽象类接口)。 其次利用多态原理,将实现类(继承于抽象接口)各自进行自己的实现。这样的话,在实现类中是一个高内聚的类...
  • fengsh998
  • fengsh998
  • 2012年10月30日 18:15
  • 1252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)