Java简单工厂模式详细解释

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

总结

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

阅读剩余 61%

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

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

相关文章

  • 解析Java的Jackson库中对象的序列化与数据泛型绑定

    下面是详细讲解“解析Java的Jackson库中对象的序列化与数据泛型绑定”的完整攻略: 什么是Jackson库? Jackson是一个用于JSON序列化和反序列化的Java库,它能够将Java对象序列化为JSON格式,以及将JSON格式的数据反序列化为Java对象。 Jackson中的对象序列化 在Jackson中,对象序列化的实现通常基于对象映射(Obj…

    Java 2023年5月26日
    00
  • 基于springboot 长轮询的实现操作

    基于Spring Boot长轮询的实现操作 长轮询是一种实现实时通信的技术,它可以在客户端和服务器之间建立一个持久的连接,以便服务器可以在有新数据时立即向客户端推送。在本文中,我们将讲解如何使用Spring Boot实现长轮询,包括两个示例。 示例一:使用Spring WebFlux实现长轮询 Spring WebFlux是Spring Framework …

    Java 2023年5月15日
    00
  • 详解Java编程中包package的内容与包对象的规范

    Java编程中的包(package)是为了更好地组织类而产生的概念,它可以将同一类别或功能的类文件存放在同一包目录下,使用时只需要import相应包的类即可。在Java编程中,包的定义需要遵循一定的规范。 包的定义规范 定义包名时,使用小写字母(包名不要与类名相同); 将包的名字写在Java源文件的顶部; 多个单词组成包名时,使用”.”分割,例如com.co…

    Java 2023年5月26日
    00
  • jsp倒计时简单实现方法

    关于 “jsp倒计时简单实现方法” ,我可以提供以下详细的攻略: 一、前置知识 在实现倒计时的过程中,需要了解基本的前端技术(如html、css、JavaScript)和后端技术(如jsp等),并且需要了解 Javascript 定时器的使用方法。 二、实现步骤 创建一个jsp页面,实现基本的页面布局(比如可以放置一个计时器 div 容器)。 在页面中加入J…

    Java 2023年6月15日
    00
  • IDEA插件开发之环境搭建过程图文详解

    首先,要进行IDEA插件开发,需要搭建相应的开发环境。下面是我准备的完整攻略: 环境准备 Java环境 IDEA插件开发需要Java的支持,所以需要先安装Java环境。如果还没有安装,可以在Java官网上下载对应版本的Java开发包,并按照官方文档进行安装操作。 IntelliJ IDEA安装 下载并安装IntelliJ IDEA开发环境。建议下载最新版本。…

    Java 2023年5月26日
    00
  • 如何使用并发集合?

    如何使用并发集合? 在开发中,我们常遇到多个线程同时使用共享数据的情况,这时我们需要使用并发集合来确保线程安全。Java并发集合提供了线程安全的工具类,我们可以在多线程环境下使用这些工具类来保证线程安全。Java中有多种并发集合可以使用,如ConcurrentHashMap、ConcurrentSkipListMap、CopyOnWriteArrayList…

    Java 2023年5月10日
    00
  • Springboot动态切换数据源的具体实现与原理分析

    下面开始讲解“Springboot动态切换数据源的具体实现与原理分析”的完整攻略。 一. 实现原理分析 1.1. 多数据源的实现方式 在多数据源的实现中,我们不能像单数据源的实现那样,在 application.properties 或 application.yml 中写入数据源的配置信息。我们需要寻找一种实现方式,能够在程序运行期间动态配置数据源信息。 …

    Java 2023年5月20日
    00
  • 解决SpringBoot项目启动后网页显示Please sign in的问题

    针对SpringBoot项目启动后网页显示Please sign in的问题,一般是因为Spring Security认证授权机制未配置或配置不正确所致,可以采取以下步骤进行解决: 第一步:检查pom.xml中是否添加Spring Security依赖 启动Spring Security需要添加spring-boot-starter-security依赖,检…

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