ITPub博客

首页 > 应用开发 > Java > 如何在 Java 中创建一个工厂类?

如何在 Java 中创建一个工厂类?

原创 Java 作者:mingtian66 时间:2024-11-08 12:25:12 0 删除 编辑

在 Java 中,工厂类(Factory Class)是一种设计模式,用于创建对象,而不直接使用 new 关键字来实例化对象。它通过提供一个方法来决定实例化的具体类,通常用于构建复杂的对象、隐藏具体类的构造逻辑或简化客户端代码。
工厂类的设计模式

工厂模式主要有两种类型:

    简单工厂模式(Simple Factory Pattern):提供一个静态方法,根据参数返回某个类的实例。
    工厂方法模式(Factory Method Pattern):为每个产品提供一个创建工厂,通过实现不同的工厂接口创建不同的实例。
    抽象工厂模式(Abstract Factory Pattern):提供一个接口来创建一组相关或依赖的对象,而不指定具体类。

1. 简单工厂模式示例

假设我们有一个交通工具的接口 Vehicle,并有不同的实现类:Car 和 Bike。我们可以使用一个简单工厂类来根据需要返回相应的交通工具实例。
代码示例

// 定义交通工具接口
interface Vehicle {
    void drive();
}

// Car 类实现 Vehicle 接口
class Car implements Vehicle {
    public void drive() {
        System.out.println("Driving a car...");
    }
}

// Bike 类实现 Vehicle 接口
class Bike implements Vehicle {
    public void drive() {
        System.out.println("Riding a bike...");
    }
}

// 简单工厂类
class VehicleFactory {
    // 静态方法,根据传入的类型返回不同的对象
    public static Vehicle getVehicle(String type) {
        if (type.equalsIgnoreCase("Car")) {
            return new Car();
        } else if (type.equalsIgnoreCase("Bike")) {
            return new Bike();
        }
        throw new IllegalArgumentException("Unknown vehicle type");
    }
}

使用示例

public class Main {
    public static void main(String[] args) {
        Vehicle car = VehicleFactory.getVehicle("Car");
        car.drive();  // 输出: Driving a car...

        Vehicle bike = VehicleFactory.getVehicle("Bike");
        bike.drive(); // 输出: Riding a bike...
    }
}

在这个例子中,VehicleFactory 通过 getVehicle 方法来决定创建 Car 还是 Bike 实例。客户端代码不需要直接实例化具体的类,从而简化了代码并提高了灵活性。
2. 工厂方法模式示例

工厂方法模式为每种产品提供一个独立的工厂。继续上面的示例,可以为每种交通工具定义独立的工厂。
代码示例

// 定义抽象工厂接口
interface VehicleFactory {
    Vehicle createVehicle();
}

// Car 的工厂实现
class CarFactory implements VehicleFactory {
    public Vehicle createVehicle() {
        return new Car();
    }
}

// Bike 的工厂实现
class BikeFactory implements VehicleFactory {
    public Vehicle createVehicle() {
        return new Bike();
    }
}

使用示例

public class Main {
    public static void main(String[] args) {
        VehicleFactory carFactory = new CarFactory();
        Vehicle car = carFactory.createVehicle();
        car.drive();  // 输出: Driving a car...

        VehicleFactory bikeFactory = new BikeFactory();
        Vehicle bike = bikeFactory.createVehicle();
        bike.drive(); // 输出: Riding a bike...
    }
}

在这种方式下,每个产品都有自己的工厂类,符合 开放/关闭原则,即添加新产品只需要新建工厂和实现即可,无需修改原有工厂类。
3. 抽象工厂模式示例

抽象工厂模式适用于需要创建一组相关产品的情况。例如,如果我们需要创建不同的 Vehicle 和对应的 Engine,可以使用抽象工厂模式来生成相关的对象。
代码示例

// 定义 Engine 接口
interface Engine {
    void start();
}

// CarEngine 实现 Engine
class CarEngine implements Engine {
    public void start() {
        System.out.println("Starting car engine...");
    }
}

// BikeEngine 实现 Engine
class BikeEngine implements Engine {
    public void start() {
        System.out.println("Starting bike engine...");
    }
}

// 抽象工厂接口,提供创建相关对象的方法
interface AbstractVehicleFactory {
    Vehicle createVehicle();
    Engine createEngine();
}

// Car 工厂实现,生产 Car 和 CarEngine
class CarFactory implements AbstractVehicleFactory {
    public Vehicle createVehicle() {
        return new Car();
    }
    public Engine createEngine() {
        return new CarEngine();
    }
}

// Bike 工厂实现,生产 Bike 和 BikeEngine
class BikeFactory implements AbstractVehicleFactory {
    public Vehicle createVehicle() {
        return new Bike();
    }
    public Engine createEngine() {
        return new BikeEngine();
    }
}

使用示例

public class Main {
    public static void main(String[] args) {
        AbstractVehicleFactory carFactory = new CarFactory();
        Vehicle car = carFactory.createVehicle();
        Engine carEngine = carFactory.createEngine();

        car.drive();       // 输出: Driving a car...
        carEngine.start(); // 输出: Starting car engine...

        AbstractVehicleFactory bikeFactory = new BikeFactory();
        Vehicle bike = bikeFactory.createVehicle();
        Engine bikeEngine = bikeFactory.createEngine();

        bike.drive();       // 输出: Riding a bike...
        bikeEngine.start(); // 输出: Starting bike engine...
    }
}

选择何种工厂模式

    简单工厂模式适合少量产品种类,创建逻辑不复杂的场景。
    工厂方法模式更灵活,适合需要对产品种类进行扩展的情况。
    抽象工厂模式适合需要创建一组相关产品的情况,可以保持产品族之间的关联。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3047463/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    603019