JAVA中的工厂模式

一、工厂模式概述

工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但具体创建的对象类型可以在运行时决定。在JAVA中,工厂模式通过封装对象的创建过程,使得代码更加灵活和可扩展。

二、工厂模式的分类

根据工厂模式的实现方式,可以将其分为简单工厂模式、工厂方法模式和抽象工厂模式。

1. 简单工厂模式

简单工厂模式是最简单的工厂模式,它通过一个静态方法来创建对象。客户端只需要传入相应的参数,即可得到对应的对象。但是,简单工厂模式违反了开闭原则,当需要增加新的产品时,需要修改工厂类的代码。

2. 工厂方法模式

工厂方法模式是对简单工厂模式的改进,它定义了一个创建对象的接口,但让子类决定具体要实例化哪一个类。工厂方法模式将对象的创建过程延迟到子类中,使得系统更加灵活和可扩展。

3. 抽象工厂模式

抽象工厂模式是工厂方法模式的升级版,它用来创建一系列相关或者互相依赖的对象,而不需要指定它们具体的类。抽象工厂模式为创建一组相关对象提供了一种接口,客户端可以使用这个接口来创建对象,而不需要知道具体创建的是哪个类的对象。

三、工厂模式的示例

下面以简单工厂模式为例,介绍如何在JAVA中实现工厂模式。

1. 创建产品接口

首先,创建一个产品接口Product,定义产品的通用方法。

public interface Product {
    void use();
}

2. 创建具体产品类

然后,创建实现Product接口的具体产品类ConcreteProductAConcreteProductB

public class ConcreteProductA implements Product {
    @Override
    public void use() {
        System.out.println("使用具体产品A");
    }
}

public class ConcreteProductB implements Product {
    @Override
    public void use() {
        System.out.println("使用具体产品B");
    }
}

3. 创建工厂类

最后,创建一个工厂类SimpleFactory,提供一个静态方法createProduct来创建产品对象。客户端可以通过调用这个方法并传入参数来得到相应的产品对象。

public class SimpleFactory {
    public static Product createProduct(String type) {
        if ("A".equals(type)) {
            return new ConcreteProductA();
        } else if ("B".equals(type)) {
            return new ConcreteProductB();
        } else {
            throw new IllegalArgumentException("无效的产品类型:" + type);
        }
    }
}

4. 客户端使用示例

在客户端代码中,可以通过调用SimpleFactorycreateProduct方法来创建产品对象,并调用其use方法。

public class Client {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.use(); // 输出:使用具体产品A
        Product productB = SimpleFactory.createProduct("B");
        productB.use(); // 输出:使用具体产品B
    }
}