我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java工厂模式该如何理解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java工厂模式该如何理解

这篇文章将为大家详细讲解有关Java工厂模式该如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    一、简单工厂模式

    何为简单工厂模式?

    首先先通过一个案例来理解

    我有一个需求,要买车,买车有不同的型号,那么我们常见的做法就是我买车点有什么车我就买什么车,实例如下

    定义一个车接口

     public interface Car {    void name();}

    定义一个实现类,例如宝马

    public class Baoma implements Car {     @Override    public void name() {        System.out.println("宝马");    }}

    测试

    public class Test {    public static void main(String[] args) {                Car car3 = new Baoma();        car3.name();

     结果:宝马

    很显然这并不符合我们工厂设计模式的思想,我们不应该让用户去new一个车出来,现实生活中也不可能自己去new一个车然后自己买,对不对,因此我们要设计一个简单的工厂来满足我们的需求,

    简单工厂类

    public class CarFactory {    public static Car getCar(String car) {        if(car.equals("宝马")) {            return new Baoma();        }else if(car.equals("奥迪")) {            return new AoDI();        }        return null;    }}

    测试

     Car car = CarFactory.getCar("宝马");        car.name();         Car car1 = CarFactory.getCar("奥迪");        car1.name();

    结果:宝马 奥迪

    那么此时我们用户就不需要去关心我们的车是怎么来的,车该怎么造出来,造出来是什么车,我用户只管从工厂中去拿出我们需要的车即可,如果没有,再从工厂中去添加

     Java工厂模式该如何理解        

    该图是对简单工厂模式的一个辅助理解。     

    总结一下,简单工厂模式: 用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)                  

    二、工厂方法模式

    那么在简单工厂类大家应该发现了一个问题,如果我们需要添加一辆新车,就需要进入工厂修改工厂的代码,如果我们修改了我们的代码,那么久违反了我们设计模式的开闭原则,不好,那么我们就来到了我们的工厂方法模式。

    何为工厂方法模式,示例如下:

    其中车类和车接口不变,我们改变一下车工厂

    我们定义一个车接口,方法返回一辆车

    public interface CarFactory {    Car getCar();}

    那么我们可以想就是给每个车都配一个车工厂,那么添加的时候,只需要在新添加一个车工厂,去实现这个车工厂接口即可

    奥迪工厂

    public class AoDIFactory implements CarFactory{     @Override    public Car getCar() {        return new AoDI();    }}

    宝马工厂我就不演示了。

    测试

            Car baoma = new BaoMaFactory().getCar();        Car Aodi = new AoDIFactory().getCar();         baoma.name();        Aodi.name();

     Java工厂模式该如何理解

    那么此时如果我们要添加新车,我们只需要去添加他的车以及他的工厂即可,用户则只需要去找对应的工厂

     Java工厂模式该如何理解

    总结一下,

    工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)

    三、抽象工厂模式

    前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。

    同种类称为同等级,也就是说:工厂方法模式中只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。

    这里需要先了解一个定义:

    产品族:将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族

    Java工厂模式该如何理解

    如图所示

    3.1、抽象工厂模式的定义

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

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

    可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
    当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组
    抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。

    当然使用抽象工厂模式也是有缺点的:        

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

    3.2、  抽象工厂模式的结构

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

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

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

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

    3.3抽象工厂模式代码示例

    首先我们去定义抽象产品

    比如

     * @Description 车接口 */public interface Car {    void startCar();    void stopCar();    void washCar();}
     * @Description 车载音响类 */public interface CarAudio {    void startCarAudio();    void stopCarAudio();}

    提供具体的产品

     * @Description 奥迪车 */public class AodiCar implements Car {    @Override    public void startCar() {        System.out.println("启动奥迪车");    }     @Override    public void stopCar() {        System.out.println("关闭奥迪车");    }     @Override    public void washCar() {        System.out.println("洗奥迪车");    }}
     * @Description 奥迪车载音响 */public class AodiCarAudio implements CarAudio{     @Override    public void startCarAudio() {        System.out.println("开启奥迪车载音响");    }     @Override    public void stopCarAudio() {        System.out.println("关闭奥迪车载音响");    }}
     * @Description 宝马车 */public class BaomaCar implements Car{    @Override    public void startCar() {        System.out.println("开启宝马");    }     @Override    public void stopCar() {        System.out.println("停下宝马");    }     @Override    public void washCar() {        System.out.println("洗宝马");    }}
     * @Description 宝马车载音响 */public class BaomaCarAudio implements CarAudio{    @Override    public void startCarAudio() {        System.out.println("打开宝马车载音响");    }     @Override    public void stopCarAudio() {        System.out.println("关闭宝马车载音响");    }}

    提供抽象的工厂

     * @Description 产品工厂接口 */public interface ProductFactory {    Car ProductCar();    CarAudio ProductCarAudio();}

    提供具体的工厂

     * @Description 宝马工厂 */public class BaomaFactory implements ProductFactory{     @Override    public Car ProductCar() {        return new BaomaCar();    }     @Override    public CarAudio ProductCarAudio() {        return new BaomaCarAudio();    }}
     * @Description aodi工厂 */public class AodiFactory implements ProductFactory{    @Override    public Car ProductCar() {        return new AodiCar();    }     @Override    public CarAudio ProductCarAudio() {        return new AodiCarAudio();    }}

    客户测试类

     * @Description 消费者类 */public class Customer {    public static void main(String[] args) {        System.out.println("--------奥迪系列---------");        //获得奥迪工厂        AodiFactory aodiFactory = new AodiFactory();        Car car = aodiFactory.ProductCar();        CarAudio carAudio = aodiFactory.ProductCarAudio();        car.startCar();        car.stopCar();        carAudio.startCarAudio();          System.out.println("--------宝马系列---------");         BaomaFactory baomaFactory = new BaomaFactory();        Car carBaoma = baomaFactory.ProductCar();        CarAudio carAudioBaoma = baomaFactory.ProductCarAudio();        carBaoma.stopCar();        carBaoma.washCar();        carAudioBaoma.startCarAudio();     }}

    输出结果

            --------奥迪系列---------
    启动奥迪车
    关闭奥迪车
    开启奥迪车载音响
    --------宝马系列---------
    停下宝马
    洗宝马
    打开宝马车载音响

    idea中类图关系

    Java工厂模式该如何理解

    如果我们要新增产品,需在总工厂去添加方法,而且其他的类也会修改,印证了我们之前写到的缺点,

    总结一下:

    抽象工厂模式就是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂

    四、小结

    工厂模式的核心本质

    实例化对象不使用new,用工厂方法代替

    将选择实现类,创建对象时统一管理和控制,从而将调用者跟我们的实现类解耦

    简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)

    工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)

    抽象工厂模式:围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂

    关于Java工厂模式该如何理解就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Java工厂模式该如何理解

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Java工厂模式该如何理解

    这篇文章将为大家详细讲解有关Java工厂模式该如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、简单工厂模式何为简单工厂模式?首先先通过一个案例来理解我有一个需求,要买车,买车有不同
    2023-06-22

    如何理解Java简单工厂模式

    本篇文章为大家展示了如何理解Java简单工厂模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。简单工厂模式概述1.定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共
    2023-06-25

    怎么理解Java设计模式的抽象工厂模式

    这篇文章主要讲解了“怎么理解Java设计模式的抽象工厂模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的抽象工厂模式”吧!一、什么是抽象工厂模式为创建一组相关或相互
    2023-06-25

    Java设计模式——工厂设计模式详解

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory)。2:工厂方法(Factory Method)。3:抽象工厂(Abstra
    2023-05-30

    java 单例模式和工厂模式实例详解

    单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。私有的构造方法指向自己实例的私有静态引用以自己实例为返回值的静态的公有的方法饿汉式单例 public class Singleton { private
    2023-05-31

    java设计模式之简单工厂模式详解

    简单工厂模式:由一个工厂对象决定创建出哪一种类的实例。1.抽象类public abstract class People { public abstract void doSth();}
    2023-05-31

    Java工厂设计模式课程详解

    工厂模式是Java中最常用的设计模式之一。 这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。在工厂模式中,我们没有创建逻辑暴露给客户端创建对象,并使用一个通用的接口引用新创建的对象。 (推荐学习:java课程)实现方法我们将创
    Java工厂设计模式课程详解
    2016-01-06

    详解Java项目中的工厂模式

    详解Java项目中的工厂模式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 简单工厂模式    当需要加法类的时候,调用工厂类的CreateOperate(),要指定制造的
    2023-05-31

    PHP如何实现工厂模式

    在PHP中实现工厂模式,可以按照以下步骤进行:1. 定义一个接口或者抽象类,作为产品的基类,包含产品的共同属性和方法。2. 创建具体产品类,实现产品基类的接口或者继承抽象类,并实现具体产品的特定属性和方法。3. 创建一个工厂类,用于创建具体
    2023-08-24

    java如何实现抽象工厂模式Abstract Factory

    这篇文章给大家分享的是有关java如何实现抽象工厂模式Abstract Factory的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在工厂类模式中,如果需要新的类时,需要修改工厂类,这样显然不利于扩展。在抽象工厂
    2023-06-04

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录