返回顶部
首页 > 资讯 > 精选 >Java工厂模式该如何理解
  • 864
分享到

Java工厂模式该如何理解

2023-06-22 08:06:46 864人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关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工厂模式该如何理解就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

    --结束END--

    本文标题: Java工厂模式该如何理解

    本文链接: https://lsjlt.com/news/303585.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java工厂模式该如何理解
      这篇文章将为大家详细讲解有关Java工厂模式该如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、简单工厂模式何为简单工厂模式?首先先通过一个案例来理解我有一个需求,要买车,买车有不同...
      99+
      2023-06-22
    • 如何理解Java简单工厂模式
      本篇文章为大家展示了如何理解Java简单工厂模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。简单工厂模式概述定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的...
      99+
      2023-06-25
    • Java工厂模式之简单工厂,工厂方法,抽象工厂模式详解
      目录1、简单工厂模式1.定义2.代码案例3.适用场景4.优缺点2、工厂方法模式1.定义2.代码案例3.适用场景4.优缺点3、抽象工厂模式1.定义2.代码案例3.适用场景4.优缺点4、...
      99+
      2024-04-02
    • JAVA设计模式之工厂模式(三种工厂模式)
      1.工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23 种设计模式...
      99+
      2023-09-04
      设计模式
    • 怎么理解Java设计模式的抽象工厂模式
      这篇文章主要讲解了“怎么理解Java设计模式的抽象工厂模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的抽象工厂模式”吧!一、什么是抽象工厂模式为创建一组相关或相互...
      99+
      2023-06-25
    • 深入理解Java设计模式之抽象工厂模式
      目录一、什么是抽象工厂模式二、抽象工厂模式的应用场景三、抽象工厂模式和工厂方法模式对比四、抽象工厂模式的优缺点五、抽象工厂模式的实现六、总结一、什么是抽象工厂模式 为创建一组相关或相...
      99+
      2024-04-02
    • 深入理解Java设计模式之简单工厂模式
      目录一、什么是简单工厂模式二、简单工厂模式的结构三、简单工厂模式的应用场景四、简单工厂模式和工厂方法模式区别五、简单工厂模式和策略模式的异同六、简单工厂模式的优缺点七、简单工厂模式的...
      99+
      2024-04-02
    • java设计模式--三种工厂模式详解
      目录简单工厂代码:1.产品接口2.产品接口实现子类3.简单工厂类4.调用工厂5.测试工厂方法代码:1.工厂接口2.工厂实现子类3.产品接口4.产品实现子类5.调用6.测试1.产品接口...
      99+
      2024-04-02
    • Java设计模式——工厂设计模式详解
      工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。工厂模式的形态工厂模式主要用一下几种形态:简单工厂(Simple Factory)。2:工厂方法(Factory Method)。3:抽象工厂(Abstract...
      99+
      2023-05-30
      java 设计模式 ava
    • Java工厂模式的深入了解
      目录一、简单工厂模式二、工厂方法模式三、抽象工厂模式3.1、抽象工厂模式的定义3.2、  抽象工厂模式的结构3.3抽象工厂模式代码示例四、小结一、简单工厂模式 何为简单工厂...
      99+
      2024-04-02
    • Java设计模式之抽象工厂模式详解
      目录一、什么是抽象工厂模式二、示例程序三、UML一、什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,这称之为抽象工厂模式(Abstract ...
      99+
      2024-04-02
    • Java设计模式之工厂模式案例详解
      目录分类案例需求方案一:简单工厂模式方案二:工厂方法模式方案三:抽象工厂模式对比分析总结 分类 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 案例 需求 根据蛋糕的不同口味,...
      99+
      2024-04-02
    • java设计模式之简单工厂模式详解
      简单工厂模式:由一个工厂对象决定创建出哪一种类的实例。抽象类public abstract class People { public abstract void doSth();}...
      99+
      2023-05-31
      java 设计模式 简单工厂
    • Java设计模式之工厂方法模式详解
      目录1.工厂方法是什么2.如何实现3.代码实现4.工厂方法模式的优点5.拓展1.工厂方法是什么 众所周知,工厂是生产产品的,并且产品供消费者使用。消费者不必关心产品的生产过程,只需要...
      99+
      2024-04-02
    • java 单例模式和工厂模式实例详解
      单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。私有的构造方法指向自己实例的私有静态引用以自己实例为返回值的静态的公有的方法饿汉式单例 public class Singleton { private ...
      99+
      2023-05-31
      java 单例模式 工厂模式
    • java中抽象工厂模式与工厂方法模式的区别
      一、简单工厂模式特点:它是一个具体的类,非接口 抽象类。有一个重要的create()方法,利用if或者 switch创建产品并返回。create()方法通常是静态的,所以也称之为静态工厂。缺点:扩展性差(我想增加一种面条,除了新增一个面条产...
      99+
      2015-05-09
      java入门 java 抽象工厂模式 工厂方法模式 区别
    • java什么是工厂模式
      工厂方法模式(Factory Method)工厂方法模式分为三种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者的共同接口:public ...
      99+
      2017-11-03
      java入门 java 工厂模式
    • java工厂模式有哪些
      java中的工厂模式有:1.简单工厂模式;2.工厂方法模式;3.抽象工厂模式;java中的工厂模式有以下几种简单工厂模式java中简单工厂模式是指通过定义一个工厂类来创建其他类的实例,且被创建的实例都具有具有共同的父类。工厂方法模式java...
      99+
      2024-04-02
    • java工厂模式怎么写
      这篇文章主要介绍“java工厂模式怎么写”,在日常操作中,相信很多人在java工厂模式怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java工厂模式怎么写”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
      99+
      2023-06-19
    • JavaScript工厂模式详解
      目录简单工厂模式(Simple Factory)工厂方法模式(Factory Method)安全的工厂方法抽象工厂模式(Abstract Factory)总结简单工厂模式(Simpl...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作