Java设计模式之工厂方法模式详解

 更新时间:2022年08月29日 08:55:52   作者:niuyongzhi  
工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂、具体工厂、抽象产品、具体产品

1.工厂方法是什么

众所周知,工厂是生产产品的,并且产品供消费者使用。消费者不必关心产品的生产过程,只需要关心用哪种产品就行。

在Java世界中,工厂方法模式和现实功能类似。工厂即一个工厂类,提供获得对象(产品)的方法(工厂方法)。其他类(消费者)需要用到某个对象时,只需调用工厂方法就行,不必new这个对象。

2.如何实现

1)创建产品的抽象类或接口---抽象产品

2)创建具体产品的类---具体产品

3)创建工厂的抽象类或接口---抽象构造类

4)创建具体工厂类---具体构造类

3.代码实现

     比如想要获得车的参数信息,轮胎信息等。

1)抽象产品

/**
 * 产品抽象类
 */
public abstract class Tyre {
    String name;
    public abstract void getName();
}

2)具体产品

/**
 * 具体产品
 */
public class MichelinTyre extends Tyre {
    MichelinTyre(){
        name = "米其林轮胎";
    }
    @Override
    public void getName() {
        System.out.println("car name :"+name);
    }
}

3)抽象构造类

/**
 * 抽象构造类
 */
public abstract class Car {
    /**
     * 对外提供产品的抽象方法
     * @return
     */
    public abstract Tyre getTyre();
}

4)具体构造类

/**
 * 具体构造类
 */
public class BydCar extends Car {
    /**
     * 对外提供获得对象的方法。
     * 当用户想要获得某个产品时,可以通过相应的工厂方法来获取,而不是直接通过new的方式。
     * 优点:避免用户通过new来获取对象,让用户代码和产品代码解耦。
     * @return
     */
    @Override
    public Tyre getTyre() {
        return new MichelinTyre();
    }
}

5)测试类

/**
 * 测试类
 */
public class Main {
    public static void main(String args []){
        Tyre tyre;
        Car car = new BydCar();
        tyre = car.getTyre();
        tyre.getName();
    }
}

4.工厂方法模式的优点

1)可以让用户代码和某个特定对象的子类的代码解耦

2)用户不必关心他所使用的对象是如何创建的,只需要知道该对象有哪些方法可供调用即可。

5.拓展

工厂模式在Java集合框架中的应用案例

        Collection<Integer> list = new LinkedList<Integer>();
        for(int i = 0;i<5;i++){
            list.add(i);
        }
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

在Collection接口中定义了一个 iterator方法,返回Iterator接口的实例。

   Iterator接口----抽象产品

   Iterator的实现类---具体产品

   Collection接口---抽象构造

  LinkedList链表类--具体构造类

到此这篇关于Java设计模式之工厂方法模式详解的文章就介绍到这了,更多相关Java工厂方法模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java根据模板导出PDF的详细实现过程

    java根据模板导出PDF的详细实现过程

    前段时间因为相关业务需求需要后台生成pdf文件,所以下面这篇文章主要给大家介绍了关于java根据模板导出PDF的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • IDEA插件EasyCode及MyBatis最优配置步骤详解

    IDEA插件EasyCode及MyBatis最优配置步骤详解

    这篇文章主要介绍了IDEA插件EasyCode MyBatis最优配置步骤详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • springboot设置了server.port但是没有用,还是8080问题

    springboot设置了server.port但是没有用,还是8080问题

    这篇文章主要介绍了springboot设置了server.port但是没有用,还是8080问题的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • VSCode+Gradle搭建Java开发环境实现

    VSCode+Gradle搭建Java开发环境实现

    这篇文章主要介绍了VSCode+Gradle搭建Java开发环境实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java语言中&&与& ||与|的区别是什么

    Java语言中&&与& ||与|的区别是什么

    这篇文章主要介绍了Java语言中&&与& ||与|的区别是什么的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java中HashMap和Hashtable及HashSet的区别

    Java中HashMap和Hashtable及HashSet的区别

    以下是对Java中HashMap和Hashtable及HashSet的区别进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • Java并发volatile可见性的验证实现

    Java并发volatile可见性的验证实现

    这篇文章主要介绍了Java并发volatile可见性的验证实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • java批量插入数据的几种方法

    java批量插入数据的几种方法

    这篇文章主要给大家介绍了关于java批量插入数据的几种方法,大家在Java项目中经常会出现大量向数据库中插入的情况,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 浅谈Java中BIO、NIO和AIO的区别和应用场景

    浅谈Java中BIO、NIO和AIO的区别和应用场景

    这篇文章主要介绍了Java中BIO、NIO和AIO的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • java spring mvc处理器映射器介绍

    java spring mvc处理器映射器介绍

    这篇文章主要介绍了java spring mvc处理器映射器,文章围绕equestMapping解析映射介绍展开源码内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-03-03

最新评论