Java设计模式-工厂模式

原创 2015年11月20日 10:06:20

Java设计模式-工厂模式

工厂模式,使用工厂来建造对象,省略new的创建方法。

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

1.引言
1)还没有工厂时代:假如还没有工业革命,如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用。
2)简单工厂模式:后来出现工业革命。用户不用去创建宝马车。因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建。比如想要320i系列车。工厂就创建这个系列的车。即工厂可以创建产品。
3)工厂方法模式时代:为了满足客户,宝马车系列越来越多,如320i,523i,30li等系列一个工厂无法创建所有的宝马系列。于是由单独分出来多个具体的工厂。每个具体工厂创建一种系列。即具体工厂类只能创建一个具体产品。但是宝马工厂还是个抽象。你需要指定某个具体的工厂才能生产车出来。
4)抽象工厂模式时代:随着客户的要求越来越高,宝马车必须配置空调。而且这空调必须对应给系列车才能使用。于是这个工厂开始生产宝马车和需要的空调。
最终是客户只要对宝马的销售员说:我要523i空调车,销售员就直接给他523i空调车了。而不用自己去创建523i空调车宝马车.

2. 简单工厂模式
1)UML图:
简单工厂模式UML图

2)Java实例

//BWM接口:
public interface BWM {
    public void createBwm();
}
//BWM310实例
public class BWM310 implements BWM {
    public void createBwm() {
        System.out.println("create bwm310");
    }

}
//BWM523实例
public class BWM523 implements BWM {
    public void createBwm() {
        System.out.println("create bwm523");
    }
}
//BWM工厂
public class FactoryBWM {
    public static BWM createBwm(int type){
        BWM bwm = null;
        switch (type){
        case 310:
            bwm = new BWM310();
            break;
        case 523:
            bwm = new BWM523();
            break;
        default:
            System.out.println("未知车型");
        }
        return bwm;
    }
}
//测试类:
public class Test {
    public static void main(String[] args) {
        //生成310
        BWM bwm = FactoryBWM.createBwm(310);
        bwm.createBwm();
        //生产523
        bwm = FactoryBWM.createBwm(523);
        bwm.createBwm();
    }
}
//输出结果:
create bwm310
create bwm523

简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。

先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

下面我们从开闭原则(对扩展开放;对修改封闭)上来分析下简单工厂模式。当客户不再满足现有的车型号的时候,想要一种速度快的新型车,只要这种车符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。所以对产品部分来说,它是符合开闭原则的;但是工厂部分好像不太理想,因为每增加一种新型车,都要在工厂类中增加相应的创建业务逻辑(createBMW($type)方法需要新增case),这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。对于这样的工厂类,我们称它为全能类 或者上帝类。

我们举的例子是最简单的情况,而在实际应用中,很可能产品是一个多层次的树状结构。由于简单工厂模式中只有一个工厂类来对应这些产品,所以这可能会把我们的上帝累坏了,也累坏了我们这些程序员

于是工厂方法模式作为救世主出现了。 工厂类定义成了接口,而每新增的车种类型,就增加该车种类型对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码

参考:
[1]: http://blog.csdn.net/hguisu/article/details/7505909

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JAVA设计模式之抽象工厂模式

  • 2014年10月14日 10:46
  • 10KB
  • 下载

java设计模式之抽象工厂模式

  • 2013年05月11日 14:46
  • 13KB
  • 下载

java设计模式之工厂模式

在上一篇《java设计模式之策略模式》中,我们针对提到的问题实现的解决方法有两种策略,看起来代码很容易上手维护,当然,上面提到的策略只是为了解决问题,但是你仔细的再考虑一下,如果有第三种,第四种乃至以...
  • tabolt
  • tabolt
  • 2015年12月18日 16:05
  • 301

java设计模式-抽象工厂模式

  • 2016年01月30日 00:17
  • 10KB
  • 下载

java设计模式-工厂模式

  • 2016年01月30日 00:16
  • 8KB
  • 下载

Java设计模式——工厂模式

工厂模式是一种比较常见的创建模式。有时,可能你使用了工厂模式而你却还不知道你已经使用了它。至少我感觉下面说的第一种简单工厂模式,你是已经很熟悉了。...

Java设计模式之工厂模式实现

  • 2013年03月19日 13:48
  • 16KB
  • 下载

java 设计模式之工厂模式

  • 2013年04月12日 14:24
  • 5KB
  • 下载

JAVA设计模式(02):创建型-抽象工厂模式(Abstract Factory)

定义:提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。 类型:创建类模式 基本结构:       优缺点:          优点:a,易于交换产品系列,由于具体工厂类...

JAVA设计模式研究之抽象工厂模式

  • 2012年07月02日 07:18
  • 255KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java设计模式-工厂模式
举报原因:
原因补充:

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