1.简单工厂模式

2019-07-04  本文已影响0人  _zhaoyan_

(1)是什么---概念

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

(2)为什么---产生动机

当我们需要使用一个对象时,通常只需要通过关键字 new ,就可以得到一个实例,为什么还需要通过简单工厂这么繁琐的方式创建对象呢?

举例说明:

正常模式下,我需要一个苹果,我需要创建一个苹果的对象,并操作对象获得苹果,当我想要一个香蕉的时候要需要创建一个香蕉的对象,并操作它获取香蕉,同理,我想要获取其他的水果,都需要先创建一个对象,然后获得。这样对象在很多地方进行使用,那么大量相同且繁琐的处理逻辑,会扩散到项目各个地方;

因此,工厂模式产生了,当你需要什么,只需要传入一个正确地参数,就能获取你所需要的对象,无需了解怎么样创建对象。

如图所示:当想要苹果的时候直接在农场中进行获取苹果就OK,不需要亲自去苹果园进行采摘。

模式结构:

(a)抽象角色:简单工厂模式所创建所有对象的父类,它负责描述所有实例所有的公共接口;例如:Fruit类

(b)工厂角色:简单工厂模式的核心,他负责实现创建所有实力的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象;FruitFactory类

(c)具体产品角色:简单工厂模式所创建的具体实例对象;具体产品类例如:苹果,香蕉等

(3)怎么做---功能说明和代码实现

代码逻辑结构如下图所示,通过工厂类中得方法传入想要得类型,就可以获得相应地实例类。

具体实现参照github库源码,地址如下:

https://github.com/zhaoyan1990/designModel

(4)解决问题

a.简化对象的使用

b.简化冗余逻辑

c.减少重复代码

(5)使用场景

当需要根据一定的逻辑,创建一个抽象接口的一系统对象时;

前提条件:

抽象接口的实现类不应太多,而且种类固定(不会随着时间变化而增加),否则,简单工厂方法中的if else判断会越来越多,越来越复杂;而且还需要不断修改工厂方法,这违背了“开闭原则”;

例如:jdbc连接,

          计算机运算池,

jdk中的NumberFormat,根据Local,返回适合当地类型的NumberFormat对象;

private static NumberFormat getInstance(Locale desiredLocale, int choice);

(6)总结

        综上所述,简单工厂模式理论上觉得很合理,但实际上不可能存在一个工厂能生产所有的东西,例如每种水果的培育方式都不一样。映射到spring框架中,我们有很多很多种的bean需要生产,如果只依靠一个简单工厂来实现,那么我们得在工厂类中嵌套多少个if..else if啊?因此,请关注工厂模式!!!

上一篇下一篇

猜你喜欢

热点阅读