首页 > 经验记录 > Pattern > java设计模式_工厂模式

java设计模式_工厂模式

工厂模式

 

工厂模式主要是实现了创建和调用者的分离

 

核心本质:

  • 实例化对象,用工厂方法代替new操作
  • 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

 

工厂模式(factory)大概分为三种:

  • 简单工厂模式:
    • 用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码)
  • 工厂方法模式
    • 用来生产同一等级结构中的固定产品(支持增加任意产品)
  • 抽象工厂模式
    • 用来生产不用产品族的全部产品(对于增加新的产品无能为力;支持增加产品族)

 

简单工厂

  • 简单工厂也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数不同来返回不同的对象实例
  • 缺点是对于增加新产品无能为力,不修改代码就不能扩展,必须修改已有的代码。

例如:

有这么几个东西,一个Car接口,还有实现了Car接口的宝马和奥迪类

 

此时,传统的new操作是这样的

 

这样,我这个TestCar需要知道:Car类、Audi类、BMW类

那以后要是这Car有一百个实现类呢= =这个时候,我要是想要new一个Car的实现类出来,但又不想要和这一堆复杂的构造逻辑耦合,怎么办?使用工厂模式嘛

工厂类最大好处让是使用者和对象的创建分离。使用者再也不担心,对象是怎么创建的。用上接口,使用者更不需要知道对象是谁。

我只要这样创建出一个工厂类(我这用的是IF…ELSE,用switch啥的都行):

 

这一切就解决了

创建Car实现类的时候只需要这样:

 

这里与我调用者有关系的只有Car接口、CarFacory工厂类、以后就是有一万个不同的实现类也和我调用者没半毛钱关系

这样就隐藏了实现类的细节,调用者也不需要知道这个对象是咋创建的

你需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。

我就一买家,只要这车开的动就行了。我还自个造个车子?

 

这就是简单工厂了。也是用的最多的工厂

 

工厂方法模式

  • 为了避免简单工厂模式的缺点、不完全满足OCP
  • 工厂方法模式和简单工厂模式最大的不同在于,简单工程模式只有一个工厂类(对于一个项目或一个独立模块而言),而工厂方法模式有一组实现了相同接口的工厂类

工厂类大概这样:

 

在这个抽象的工厂类基础上,可以添加无数个具体的创建某个产品的实现类

比如:

 

创建对象的话就这样:

 

在设计模式上来说最好选择用工厂方法模式,虽说工厂方法模式便于添加产品,但是实际上一般都用简单工厂,因为工厂方法模式的类肯定会挺多的,难的管理。

 

 


EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00