Java简单工厂模式详细解释

yizhihongxing

Java简单工厂模式详细解释

简介

简单工厂模式是创建型模式的一种,它提供了一种创建对象的最佳方法。在简单工厂模式中,我们在创建对象的时候不会对客户端暴露创建逻辑,而是通过一个公共的静态方法返回一个新的对象。简单工厂模式属于类的创建型模式,在工厂类中,选择创建哪一种产品类的实例化是由工厂来决定的,而并非由客户端来决定。

实现

简单工厂模式的实现需要下面几个角色:

  1. 工厂角色。它是包含所有产品创建的逻辑的核心部分。对客户端隐藏了实例化产品的细节。
  2. 抽象产品角色。产品必须实现的接口或者抽象类,客户端通过它访问产品的功能。
  3. 具体产品角色。抽象产品的具体实现类,客户端通常创建并使用具体产品。

下面是一个简单的示例:

interface Car {
    void drive();
}
class Lamborghini implements Car {
    public void drive() {
        System.out.println("Lamborghini is driving");
    }
}
class Ferrari implements Car {
    public void drive() {
        System.out.println("Ferrari is driving");
    }
}
class CarFactory {
    static Car createCar(String type) {
        if (type.equalsIgnoreCase("lamborghini")) {
            return new Lamborghini();
        } else if (type.equalsIgnoreCase("ferrari")) {
            return new Ferrari();
        } else {
            throw new IllegalArgumentException("Unknown car type");
        }
    }
}

在上面的示例中,我们定义了一个接口Car,和两个实现了这个接口的具体产品类LamborghiniFerrari。我们还定义了一个简单工厂类CarFactory,它有一个静态createCar()方法,根据传递的参数type来创建具体的产品。

下面是一个客户端使用简单工厂模式的示例:

class Client {
    public static void main(String[] args) {
        Car lamborghini = CarFactory.createCar("lamborghini");
        lamborghini.drive();

        Car ferrari = CarFactory.createCar("ferrari");
        ferrari.drive();
    }
}

输出:

Lamborghini is driving
Ferrari is driving

示例

下面再给出一个更加具体的示例,通过使用简单工厂模式来创建日志记录器。

interface Logger {
    void log(String message);
}
class FileLogger implements Logger {
    public void log(String message) {
        System.out.println("File Logger: " + message);
    }
}
class ConsoleLogger implements Logger {
    public void log(String message) {
        System.out.println("Console Logger: " + message);
    }
}
class LoggerFactory {
    static Logger createLogger(String type) {
        if (type.equalsIgnoreCase("file")) {
            return new FileLogger();
        } else if (type.equalsIgnoreCase("console")) {
            return new ConsoleLogger();
        } else {
            throw new IllegalArgumentException("Unknown logger type");
        }
    }
}

在上面的示例中,我们定义了一个接口Logger,和两个实现了这个接口的具体产品类FileLoggerConsoleLogger。我们还定义了一个简单工厂类LoggerFactory,它有一个静态createLogger()方法,根据传递的参数type来创建具体的产品。

下面是一个客户端使用简单工厂模式的示例:

class Client {
    public static void main(String[] args) {
        Logger fileLogger = LoggerFactory.createLogger("file");
        fileLogger.log("This is a log record of file logger");

        Logger consoleLogger = LoggerFactory.createLogger("console");
        consoleLogger.log("This is a log record of console logger");
    }
}

输出:

File Logger: This is a log record of file logger
Console Logger: This is a log record of console logger

总结

简单工厂模式是一种简单但有效的创建型模式,它允许客户端和具体的产品实现分离,因此减少了客户端的依赖程度。虽然简单工厂模式的实现很简单,但是它仍然有很强的可扩展性,因为可以通过增加新的产品类和修改工厂类来扩展系统的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java简单工厂模式详细解释 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java基础语法之二维数组详解

    Java基础语法之二维数组详解 什么是二维数组? 在 Java 中,二维数组是一种值得重视的数据类型,它是由一维数组组成的数组。也就是说,二维数组本质上是数组的数组。 在实际开发中,二维数组常用于表示矩阵、表格或者像素等数据结构。 二维数组的声明和初始化 声明 在 Java 中,声明一个二维数组,需要指定两个维度的长度。我们可以使用如下方式来声明一个二维数组…

    Java 2023年5月26日
    00
  • 常见的原子操作有哪些?

    常见的原子操作是指直接在硬件层面上实现的原子性操作。这些操作,在多线程并发的环境下非常有用,可以保证对数据的操作是完整和一致的。常见的原子操作包括实现加减操作和内存屏障操作。 实现加减操作 在 Python 中,有一个标准的模块 threading,提供了多线程编程所需要的相关方法和类。这个模块提供了 Lock() 锁的类,用于互斥访问共享资源。其中,RLo…

    Java 2023年5月10日
    00
  • Java封装数组之添加元素操作实例分析

    Java封装数组之添加元素操作实例分析 题目描述 本文将通过示例,分析Java中如何实现封装数组的添加元素操作。 需求分析 在Java中,封装一个数组时,我们经常需要添加元素,以满足程序的需求。这个过程,本质上是对数组的扩容,并将新元素添加到数组末尾。 解决方法 Java中提供了若干种方式,可以实现封装数组的添加元素操作。以下是其中的两种方法。 方法一:使用…

    Java 2023年5月26日
    00
  • 浅谈十个常见的Java异常出现原因

    浅谈十个常见的Java异常出现原因 在Java编程过程中,我们难免会遇到各种各样的异常情况,因此了解常见的Java异常出现原因,可以帮助我们更快地定位和解决问题。下面是10种常见的Java异常及其出现原因: 1. NullPointerException NullPointerException是Java程序员经常会遇到的异常之一,它表示试图访问一个空对象的…

    Java 2023年5月26日
    00
  • Java实现跨服务器上传文件功能

    下面是一个完整的 Java 实现跨服务器上传文件功能的攻略: 1. 准备工作 在开始之前,需要确保本地和服务器上都已经安装了相应的环境: JDK:Java 开发环境; Tomcat:Java Web 应用服务器; Spring MVC:用于构建 Web 应用程序。 2. 创建项目 首先,你需要创建一个新的 Java 项目,然后创建一个 Web 程序。在 We…

    Java 2023年5月19日
    00
  • 浅析12306售票算法(java版)

    浅析12306售票算法(Java版) 前言 12306售票算法是12306官方网站采用的一种购票算法,它采用的是先进先出的算法思想,即先处理最先提交的订单。在高并发情况下,这种算法能够确保订单售出的公平性,防止订单重复抢占,提高12306网站的稳定性。 算法流程 用户提交订单,服务器接收到请求后,将订单信息放入到队列中。 售票服务不断地从队列中取出订单。 售…

    Java 2023年5月20日
    00
  • boot-admin整合Liquibase实现数据库版本管理

    Liquibase 和 Flyway 是两款成熟的、优秀的、开源/商业版的数据库版本管理工具,鉴于 Flyway 的社区版本对 Oracle 数据库支持存在限制,所以 boot-admin 选择整合 Liquibase 提供数据库版本管理能力支持。Liquibase 开源版使用 Apache 2.0 协议。 Liquibase的适用情形? 在你的项目进行版本…

    Java 2023年5月5日
    00
  • 一文掌握Spring Boot 日志文件

    一文掌握 Spring Boot 日志文件 在 Spring Boot 应用中,日志文件是非常重要的一部分,它可以帮助我们实时监控应用运行过程中发生的错误和异常,同时也便于开发人员分析问题并进行调试。本文将分享如何使用 Spring Boot 内置的日志框架 Logback 来配置日志文件。 添加 Logback 依赖 首先,在项目的 pom.xml 文件中…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部