设计模式系列--23种常见设计模式之工厂方法模式(9)

工厂方法模式

一个抽象的父类定义公共接口,设计工厂的生产规范,不同的子类实现工厂接口,生成具体的对象,每个生产的对象也是父类定义对象的具体实现。
这样做的目的是将类的实例化操作延迟到子类中完成,按照通用父类引用,运行时决定具体的使用过程。

工厂方法结构图:

编者按:

1、简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。只需告知工厂要什么;
2、工厂方法模式实现,在于工厂类中定义了产品的实现标准,客户端的使用,只需按需动态化的选择对应的工厂,不需要考虑具体的产品细节,选定的工厂自主的去通用实现具体产品,细节由工厂来完成,去除客户端和具体产品的依赖。只需选择对应的工厂。
3、两者比较,简单工厂选择产品, 工厂方法选择产品工厂。进步之处在于,同类标准新产品的实现,不需要在原来的工厂类改造,只需实现父类标准,产生新的产品,开闭原则。

代码实现用例图:

具体代码实现:

抽象工厂:

public interface VehicleFactory {
    Vehicle createVehicle();
}

抽象产品:

public interface Vehicle {

    void run();
}

汽车工厂:

public class CarFactory implements VehicleFactory {
    @Override
    public Vehicle createVehicle() {
        return new Car();
    }
}

飞机工厂:

public class AirplaneFactory implements VehicleFactory {
    @Override
    public Vehicle createVehicle() {
        return new Airplane();
    }
}

汽车产品类:

public class Car implements Vehicle {
    @Override
    public void run() {
        System.out.println("乘坐汽车出行");
    }
}

飞机产品类:

public class Airplane implements Vehicle {
    @Override
    public void run() {
        System.out.println("乘坐飞机出行");
    }
}

客户端调用:

public class Main {

    public static void main(String[] args) {
        Vehicle vehicle;
        VehicleFactory vehicleFactory;
        vehicleFactory = new AirplaneFactory();
        vehicle = vehicleFactory.createVehicle();
        vehicle.run();

        vehicleFactory = new CarFactory();
        vehicle = vehicleFactory.createVehicle();
        vehicle.run();

    }
}

实现结果:

乘坐飞机出行
乘坐汽车出行

关注公众号,获取更多资源。

猜你喜欢

转载自blog.csdn.net/weisong530624687/article/details/109642978