工厂方法模式_工厂方法设计模式

工厂方法模式

工厂方法模式

工厂方法模式是流行的创新设计模式之一。 它并不特别依赖于工厂对象来创建对象。 而是要在同一类中使用单独的方法来创建对象。

Factory Method模式定义了一个用于创建对象的接口,但是让子类决定如何实例化其对象。 每个子类必须定义其Factory方法。

在本教程中,我们将通过VehicleStore的示例学习如何实现Factory Method设计模式。

定义

让我们从定义一个VehicleStore类开始:

 public abstract class VehicleStore {
 
    public Vehicle orderVehicle(VehicleType type) {

        Vehicle vehicle = createVehicle(type);
 
        vehicle.getServiced();

        vehicle.polish();

        vehicle.provideClearance();
        
        return vehicle;

    }
 
    public abstract Vehicle createVehicle(VehicleType type);
 }

其中VehicleType是定义车辆类型的枚举:

public enum VehicleType { BIKE, CAR, TRUCK, CRANE };

注意,我们已经将createVehicle()方法定义为abstract 一个负责创建特定类型车辆的人。

定义子类:

现在,我们有两种类型的VehicleStoreLightVehiclesStoreHeavyVehiclesStore

 public class LightVehiclesStore extends VehicleStore {

    @Override

    public Vehicle createVehicle(VehicleType type) {

        switch (type) {

            case BIKE : return new Bike();

            case CAR : return new Car();

        }

        return null ;

    }
 }
 public class HeavyVehiclesStore extends VehicleStore {
    @Override

    public Vehicle createVehicle(VehicleType type) {

        switch (type) {

            case TRUCK : return new Truck();

            case CRANE : return new Crane();

        }

        return null ;

    }
 }

LightVehiclesStore负责销售轻型车辆,例如自行车或汽车。 另一方面, HeavyVehiclesStore出售卡车和起重机。

如我们所见,这两个子类都覆盖了createVehicle()方法。

我们的示例的UML图:

我们可以用类似于以下内容的UML图来表示上述示例:

我们创建的Vehicle的类型在具体的子类中确定。 同样,我们已经将VehicleStore公开为这些子类的公共接口。

我们可以进一步前进,为VehicleStore定义一个Factory对象,以避免将这些子类直接暴露给客户端代码。

结论:

在本教程中,我们探索了一个重要的创建模式-工厂方法模式。 这种模式的中心思想是让子类决定如何实例化对象。

我们的Java API中提供了该模式的一些流行实现。 其中一些包括Calendar.getInstance()java.text.NumberFormat.getInstance()java.util.ResourceBundle.getBundle()方法。

翻译自: https://www.javacodegeeks.com/2019/08/factory-method-design.html

工厂方法模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值