Java中常用的设计模式之工厂模式详解

 更新时间:2022年02月27日 14:58:23   作者:Asurplus、  
这篇文章主要为大家详细介绍了Java中常用的设计模式之工厂模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

优点

1.一个调用者想创建一个对象,只要知道其名称就可以了。

2.扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

3.屏蔽产品的具体实现,调用者只关心产品的接口。

缺点

1.每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

使用场景

1.日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

2.数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

3.设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。

一、实现方式

例如:我们需要在电商平台购买一台手机,我们并不需要去关心手机生产厂商是如何把手机生产出来的,我们只需要在搜索框输入:华为手机,小米手机,就能购买到我们想要的手机了。下面看看具体实现吧。

1、定义一个接口

package com.asurplus.common.factory;
public interface Phone {
    /**
     * 获取手机
     *
     * @return
     */
    String getPhone();
}

2、定义两个接口实现类

package com.asurplus.common.factory;
/**
 * 华为手机实现类
 */
public class HuaweiPhone implements Phone {
    @Override
    public String getPhone() {
        return "华为手机";
    }
}
package com.asurplus.common.factory;
/**
 * 小米手机实现类
 */
public class XiaomiPhone implements Phone {
    @Override
    public String getPhone() {
        return "小米手机";
    }
}

3、定义一个工厂类

package com.asurplus.common.factory;
/**
 * 手机工厂类
 */
public class PhoneFactory {
    /**
     * 获取手机
     *
     * @param name
     * @return
     */
    public static Phone getPhone(String name) {
        if ("华为".equals(name)) {
            return new HuaweiPhone();
        }
        if ("小米".equals(name)) {
            return new XiaomiPhone();
        }
        return null;
    }
}

二、测试

package com.asurplus.common.factory;
/**
 * 工厂模式
 */
public class TestMain {
    public static void main(String[] args) {
        // 获取手机
        Phone huaweiPhone = PhoneFactory.getPhone("华为");
        System.out.println(huaweiPhone.getPhone());
    }
}

输出结果

在这里插入图片描述

我们输入的:华为,得到了华为手机,从而实现了我们的工厂模式。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!  

相关文章

  • SpringBoot集成Spring Data JPA及读写分离

    SpringBoot集成Spring Data JPA及读写分离

    这篇文章主要介绍了SpringBoot集成Spring Data JPA及读写分离的相关知识,需要的朋友可以参考下
    2017-04-04
  • Java使用hutool实现文件大小的友好输出

    Java使用hutool实现文件大小的友好输出

    这篇文章主要为大家详细介绍了Java如何使用hutool实现文件大小的友好输出,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • Java日常练习题,每天进步一点点(9)

    Java日常练习题,每天进步一点点(9)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 不可不知道的10个java谎言

    不可不知道的10个java谎言

    这篇文章主要为大家详细介绍了不可不知道的10个java谎言,大家一定要谨慎,需要了解的朋友可以参考一下
    2016-09-09
  • Java HttpClient-Restful工具各种请求高度封装提炼及总结

    Java HttpClient-Restful工具各种请求高度封装提炼及总结

    这篇文章主要介绍了Java HttpClient-Restful工具各种请求高度封装提炼及总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Windows下Java调用OCR进行图片识别

    Windows下Java调用OCR进行图片识别

    这篇文章主要为大家详细介绍了Windows下Java调用OCR进行图片识别,通过Tesseract-OCR对图片进行识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Java NIO和IO的区别

    Java NIO和IO的区别

    这篇文章主要介绍了Java NIO和IO的区别,需要的朋友可以参考下
    2014-06-06
  • Spring与bean有关的生命周期示例详解

    Spring与bean有关的生命周期示例详解

    这篇文章主要给大家介绍了关于Spring与bean有关的生命周期的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • Java使用itextpdf实现Excel转PDF

    Java使用itextpdf实现Excel转PDF

    这篇文章主要为大家详细介绍了Java如何使用itextpdf实现Excel转PDF,并且支持xlsx和xls两种格,文中的示例代码讲解详细,希望对大家有所帮助
    2024-01-01
  • 详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环

    这篇文章主要介绍了详解Java中list,set,map的遍历与增强for循环的相关资料,需要的朋友可以参考下
    2017-02-02

最新评论