专业的JAVA编程教程与资源

网站首页 > java教程 正文

java设计模式之工厂模式(上篇)(java工厂模式的应用场景)

temp10 2024-10-23 15:13:00 java教程 18 ℃ 0 评论

工厂模式是我们最常用的实例化对象模式了,目的是使用工厂方法代替一系列的new操作。

在开发当中,最常用的操作莫过于使用new来新建一个对象了,但是一些情况下会带来一些问题。举例说,许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动。

java设计模式之工厂模式(上篇)(java工厂模式的应用场景)

问题:如何能轻松方便地创建对象,而让client不关心对象创建的过程呢?

解决方案:使用工厂模式,创建一个工厂类来负责创建对象。

工厂模式是为创建对象提供过渡窗口,以便将对象的创建具体过程隔离开来,达到提高灵活性的目的。

工厂模式可以分为三种:

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

  2. 工厂方法模式(Factory Method)

  3. 抽象工厂模式(Abstract Factory)

GoF在《设计模式》书中将工厂模式分为工厂方法模式和抽象工厂模式,将简单工厂模式视为工厂方法模式的一种特例。

区别主要在工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个,工厂方法模式的具体工厂类只能创建一个具体产品类实例,而抽象工厂模式可以创建多个。

下面就工厂模式中的三种模式一一介绍一遍。

1.简单工厂模式

需求:纯属虚构,某用户要买宝马车,一般情况下,卖家会直接生产一辆宝马车给用户。后来卖家生意多了,就建了个工厂,专门用来生产宝马车,只要用户有需求,卖家就让工厂生产,即工厂可以创建各种对象,关系图如下:

java代码实现:

这是产品类接口,所有具体型号的宝马车都实现了这个接口。

这是三个具体型号的宝马车产品类。

这是宝马车型号类型枚举,客户根据这个选择具体型号。

这是工厂类,本模式的核心类实现。

这是客户端实现,只需要传入具体型号,就能得到对应的车辆,不需要关心对象的创建过程。

运行结果如下:

简单工厂模式又成为静态工厂模式,主要是定义了一个用于创建对象的接口。

我们举的例子很简单,也许有人发现了,如果我要生产其他型号的宝马车,就必须得修改工厂类,新增一个case,这明显违背了六大设计原则中的开闭原则,这对于代码设计是一件大忌,于是工厂方法模式就是诞生了。

2.工厂方法模式

需求:用户越来越多,不同用户的需求也不一样,现有的几个型号满足不了所有的用户,但是在简单工厂模式基础上,要新加型号,必须修改原来的工厂模式,违背了开闭原则,于是就想着如果针对不同的型号建立不同的工厂,每个工厂只生产对应型号的车。

关系图如下:

由上图可知,工厂方法模式在简单工厂模式的基础上,增加了Abstract Factory类,派生了BWM320Factory、BWM523Factory、BWM730Factory三个工厂类,各工厂类都实现了createBWM()方法用于生产对应型号的宝马车,客户端在直接调用具体型号的工厂类的生产方法即可,当要新增车辆型号时,新增一个具体型号产品类和一个具体工厂类即可,完美符合开闭原则。

下面看java代码实现:

这是抽象工厂类。

以上分别是具体型号的工厂类。

这是客户端。

具体产品类不变,可以很清晰的看出来跟简单工厂模式的区别,对于程序的扩展更开放了,但是同时引入了更多的类,当产品类越来越多,工厂类也会越来越多。

今天先介绍前两种,抽象工厂模式下篇再介绍。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表