JAVA设计模式—工厂模式

JAVA设计模式---工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂模式使得一个类的实例化延迟到其子类。

用代码进行举例演示

假设我们有一个产品接口 Product 和两个具体产品类 ConcreteProductA 和 ConcreteProductB,以及一个工厂接口 Factory 和两个具体工厂类 ConcreteFactoryA 和 ConcreteFactoryB。

java 复制代码
// 产品接口
interface Product {
    void display();
}

// 具体产品类 A
class ConcreteProductA implements Product {
    @Override
    public void display() {
        System.out.println("This is ConcreteProductA.");
    }
}

// 具体产品类 B
class ConcreteProductB implements Product {
    @Override
    public void display() {
        System.out.println("This is ConcreteProductB.");
    }
}

// 工厂接口
interface Factory {
    Product createProduct();
}

// 具体工厂类 A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂类 B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

使用工厂模式的客户端代码:

java 复制代码
public class Client {
    public static void main(String[] args) {
        // 使用工厂A创建产品A
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.display();

        // 使用工厂B创建产品B
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.display();
    }
}
介绍工厂模式的具体应用场景

工厂模式的具体应用场景包括:

  • 数据库驱动的选择: 在连接数据库时,不同数据库有不同的驱动,可以使用工厂模式根据配置或条件选择合适的数据库驱动。
  • 日志记录器的选择: 在应用中可能需要使用不同的日志记录器(如文件日志、数据库日志),工厂模式可以根据配置选择合适的日志记录器。
  • 图形界面库中的组件创建: 在图形界面库中,不同的操作系统或主题可能需要使用不同的UI组件,工厂模式可以根据运行时条件创建相应的UI组件。
介绍工厂模式的优点

工厂模式的优点包括:

  • 封装性好: 客户端代码不需要知道具体产品的类名,只需知道工厂接口和产品接口即可。
  • 扩展性好: 如果需要添加新的产品类,只需要创建对应的具体产品类和对应的具体工厂类即可,而不需要修改现有代码。
  • 符合单一职责原则: 每个具体工厂类只负责创建对应的产品,符合单一职责原则,降低了类的复杂度和耦合度。
  • 易于管理对象: 通过工厂模式,集中管理对象的创建,有利于统一管理和维护。
  • 利于解耦: 客户端代码和具体产品类的实现解耦,可以更灵活地替换和切换产品类的实现。
相关推荐
SL_staff9 分钟前
制造业数字化协同:为什么甘特图只是起点,不是终点
java·开源·全栈
anew___26 分钟前
《从零手写操作系统 (29):管道与重定向进阶——命名管道、Here Document与Shell语法扩展》
java·开发语言·前端·javascript·网络
Mikko731 分钟前
JVM 线上排查实战(六):JFR 怎么用?JDK 8 要不要加 UnlockCommercialFeatures、jfr 命令在哪、录的文件为什么读不了
java·运维·jvm·后端
奇牙coding1 小时前
GPT-5.5 API 报 401 但 GPT-5.4 正常怎么办?不是 Key 失效,是 Organization 头的强制校验变了
java·网络·gpt·ai
a努力。1 小时前
Context-State-Memory三重信息架构揭秘
java·服务器·前端
captain3761 小时前
Maven
java·后端·idea
liangshanbo12152 小时前
主系统登录后,子系统怎么实现自动登录?
java·网络·数据库
ShineWinsu2 小时前
对于Redis:缓存的解析
java·redis·缓存·缓存穿透·缓存击穿·缓存雪崩·缓存预热
rannn_1112 小时前
【Java面试题】高频面试题1|Java 后端、MySQL、Redis 与 RAG 面试整理
java·jvm·数据库·后端·面试
写后端的胖头鱼2 小时前
一文详解Spring 事务失效场景
java·spring·事务·transactional·事务传播机制