KittyDaddy's blog KittyDaddy's blog
首页
  • 学习笔记

    • 《Java基础》
    • 《常用设计模式》
    • 《MYSQL》
    • 《GO语言》
    • 《Spring源码解读》
  • 微服务解决方案

    • 锁的演化
    • 简单限流方案
    • 海量数据切分
  • 中间件

    • Nginx
    • MQ
    • Redis
    • Keepalived
  • 面试记
  • 杂文
  • 开源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

老猫

万物皆系统
首页
  • 学习笔记

    • 《Java基础》
    • 《常用设计模式》
    • 《MYSQL》
    • 《GO语言》
    • 《Spring源码解读》
  • 微服务解决方案

    • 锁的演化
    • 简单限流方案
    • 海量数据切分
  • 中间件

    • Nginx
    • MQ
    • Redis
    • Keepalived
  • 面试记
  • 杂文
  • 开源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • java常用设计模式-单例模式
  • java常用设计模式-工厂方法模式
  • java常用设计模式-简单工厂模式
  • 接手了个项目,被if..else搞懵逼了
  • 刚接手一个业务系统,我是这么熟悉的
  • 迈开拯救烂怂代码的第一步,我是这么做的
  • 忍不了,客户让我在一个接口里面兼容多种功能点
  • 但凡有点设计原则,系统也不会写成这样
  • 一个单例模式,没必要这么卷吧
  • 真香定律!我用这种模式重构了第三方登录
  • 不得不说,在很多业务中,这种模式用得真的很香
  • 《常用设计模式》笔记
老猫
2020-07-12

java常用设计模式-工厂方法模式原创

之前介绍了简单工厂模式,我们也认识到简单模式的缺点其实也很明显,工厂类的职责相对过重,不易于扩展过于复杂的产品结构。所以我们现在来介绍一下工厂方法模式。工厂方法模式是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法模式其宗旨其实就是将类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无需关心创建细节。

接下来我们还是拿酒厂的例子来做代码演示。

首先我们来定义酒厂总接口,如下:

/**
 * @Author: mao ba
 * @Description: 造酒厂
 * @Date: 2020-07-12 16:30
 */
public interface WineFactory {
    //创建造酒厂
    IDistillery create();
}
1
2
3
4
5
6
7
8
9

上述接口显然是一个创建对象的接口,具体思路是这样的,不同的品种酒厂实现该接口之后,可以各自创建自己的对象,并且可以调用造酒的方法,说白了就是子制造厂有能力自己创建自己的产品。看一下子制造厂的实现方式。

//白酒制造厂
public class WhiteWineFactory implements WineFactory{
    public IDistillery create() {
        return new WhiteWineDistillery();
    }
}
1
2
3
4
5
6
//黄酒制造厂
public class YellowWineFactory implements WineFactory{
    public IDistillery create() {
        return new YelloWineDistillery();
    }
}
1
2
3
4
5
6

这样,我们就实现了具体创建对象延迟到子类中实现。

看一下其调用方式:

public class WineFactoryMain {
    public static void main(String[] args) {
        //酿造白酒
        WineFactory wineFactory = new WhiteWineFactory();
        wineFactory.create().makeWine();

        //酿造黄酒
        WineFactory yellowWinFactory = new YellowWineFactory();
        yellowWinFactory.create().makeWine();
    }
}
1
2
3
4
5
6
7
8
9
10
11

这样的话,我们的子类将更加地灵活。

我们来总结一下工厂方法模式适用场景:

  • 创建对象需要大量重复代码
  • 客户端(应用层)不依赖于产品类实例如何被创建、如何被实现等细节。
  • 一个类通过子类来指定创建哪个对象,则变得更加灵活。

当然上述都是优点,我们来看下缺点:

  • 类的个数容易过多,增加复杂度。
  • 增加了系统的抽象性以及理解难度。

参考书籍: 《spring 5核心原理》

#Java设计模式#工厂方法模式
上次更新: 2022/11/30, 00:06:25
java常用设计模式-单例模式
java常用设计模式-简单工厂模式

← java常用设计模式-单例模式 java常用设计模式-简单工厂模式→

最近更新
01
让大龄程序员欲罢不能的事儿
09-23
02
运营明明设置了活动开始时间,为什么到点没生效?聊聊动态定时任务
07-30
03
不是,大哥,咱这小门小户的,别搞我CDN流量啊
07-25
更多文章>
Theme by Vdoing | Copyright © 2020-2024 Kitty Daddy | License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式