1.简单工厂模式

(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啊?因此,请关注工厂模式!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值