java_设计模式_工厂模式

目录

引言

一、工厂模式的概述

二、工厂模式的介绍

简单工厂模式(Simple Factory Pattern)

工厂方法模式(Factory Method Pattern)

抽象工厂模式(Abstract factory pattern)


引言

 

一、工厂模式的概述

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。

工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式工厂方法模式,根据工厂的抽象程度可分为工厂方法模式抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。

三种不同工厂的区别
简单工厂:针对一种产品。缺点是破坏了开放,封闭原则。
工厂模式: 对简单工厂做了相应的改进,改正了简单工厂破坏开放封闭原则的错误。
抽象工厂:针对于多种产品,和简单工厂以及工厂模式并无太大的关联。 

 使用场景:
1.类不知道自己要创建哪一个对象
2.类用它的子类来指定创建哪个对象
3.客户需要清楚创建了哪一个对象

二、工厂模式的介绍

简单工厂模式(Simple Factory Pattern)

概念:是指一个工厂对象决定创建出哪一种产品类的实例(创建产品实例的过程)
使代码重复利用

简单工厂适场景
1.工厂类负责创建的对象较少
2.客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心

优点:
只需要传入一个参数,可以获取所需对象,不需要知道创建的细节。

缺点:
工厂类职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背开闭原则
不易于扩展过于复杂的产品结构

 

 

 

工厂方法模式(Factory Method Pattern)

23种设计模式之一
是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。属于创建型设计模式。

解决产品越来越多,越来越复杂的情况。

先创建一个接口,但是接口不干活,子类干活。子类细化,一个类干一件事,用户只需要创建子类,通过创建子类工厂来进行调用即可。
 

使用场景
创建对象需要大量重复代码
一个类通过其子类指定创建哪个对象,不需要传参了

优点:
用户只需要关心所需产品对应的工厂,无需关心创建细节。符合开闭原则,提高可扩展性
缺点:
类的个数增加,增加代码结构复杂度。增加系统抽象性和理解难度。

所以每个设计模式都有优点和缺点,需要根据实际情况进行选择;

 

抽象工厂模式Abstract factory pattern

抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。(抽象工厂模式针对的更多是产品族

例如图一:

使用抽象工厂模式一般要满足以下条件。

  • 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。

  • 当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。

  • 抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。

缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。

抽象工厂模式的主要角色如下:

  1. 抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。

  2. 具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。

  3. 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。

  4. 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

抽象工厂模式的主要角色模型如下:

抽象工厂模式总结:

 工厂方法使用继承实现对象的创建。而抽象方法使用组合。工厂方法只负责将客户从具体类型中解耦。而抽象工厂提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法。
高层模块只需要知道自己是哪个产品族的,藉此确定具体工厂。再通过具体工厂获取对象的时候不需要知道这个对象是属于哪个具体类的,具体工厂决定使用哪个具体类。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值