设计模式-工厂方法(Fatory Method)详解

简介: 介绍工厂方法(Fatory Method)的基本使用以及使用场景,点明工厂方法的优缺点以及在我们平时的源码中有哪些具体的体现

1. 基本概念

  • 工厂方法模式( Fatory Method )是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行

  • 在工厂方法中我们关心相应产品对象的创建工厂,而不关心对象的实际创建细节,在增加产品时也符合了开闭原则

2. 解决的主要问题

  • 工厂方法主要解决了在简单工厂中产品扩展的问题,在之前我们说的简单工厂中,随着产品的不断增多,我们工厂的职责也会越来越多,有点像万能工厂,维护性会不断降低,同时也是不符合单一职责原则的

3. 工厂方法实现

  • 更具单一职责原则,我们让专门的 Java 工厂来生产 Java 课程, python 工厂创建 python 课程,同时对工厂进行一定的抽象

  • 首先创建工厂接口 CourseFactory:

public interface CourseFactory {
    /**
     * 创建对象
     * @return
     */
    Course create();
}
  • 分别创建 Javapython 的创建工厂:
public class JavaCourseFactory implements CourseFactory {
    /**
     * 创建对象
     * @return
     */
    @Override
    public Course create() {
        return new JavaCourse();
    }
}
public class PythonCourseFactory implements CourseFactory {
    /**
     * 创建对象
     * @return
     */
    @Override
    public Course create() {
        return new PythonCourse();
    }
}
  • 测试代码
public static void main( String[] args )
    {
        CourseFactory factory = new JavaCourseFactory();
        Course course = factory.create();
        course.liveCourse();

        factory = new PythonCourseFactory();
        course = factory.create();
        course.liveCourse();

    }
  • 上述类图如下:

工厂方法类图展示

  • 我们可以看一下logback中的类图,充分体现了这一原则特性

ILoggerFactory与实现的类图

4. 总结

  • 工厂方法相对比较简单,它是在简单工厂的基础上对工厂进行了一定抽象化处理,将共工厂职责进行了职责划分

  • 工厂方法使用场景:

    • 需要创建对象的代码大量重复
    • 调用端(应用层)不依赖于对象创建的具体实现和细节
    • 一个类通过其子类来确定创建的具体对象
  • 工厂方法的缺点:

    • 复杂度增加,因为会出现大量的类,这里在实际开发中需要做一定的收敛与职责划分,降低复杂度
    • 增加了系统的整体抽象性与理解难度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值