Java设计模式之简单工厂模式

简介

工厂模式有三种:简单工厂模式、工厂模式、抽象工厂模式,简单工厂模式是最基础的一个,工厂模式的核心思想是把创建对象过程和对象本身业务处理分离。假设需要创建多个对象,每个对象的创建模式比较复杂,那么我们把这些过程放在逻辑代码中,会使得逻辑代码非常混乱;而且每当有新的产品出现,就需要修改逻辑代码,不符合“开闭原则”。

实现

  • 抽象产品类:所有需要创建产品的基类,是个纯虚类
  • 具体产品类:继承抽象产品,是根据需要添加的功能产品
  • 产品工厂类:负责生产产品
    类图如下
    在这里插入图片描述
    Car为抽象产品类 BenzCar、BMWCar、AudiCar为具体产品类 CarFactory为 产品工厂类
    代码示例
/**
 * @author: xuqiangnj@163.com
 * @date: 2019/4/21 21:49
 * @description: 车辆接口
 */
public interface Car {

    void drive();
}

/**
 * @author: xuqiangnj@163.com
 * @date: 2019/4/21 21:52
 * @description: 宝马车
 */
public class BMWCar implements Car {

    public void drive() {
        System.out.println("BMWCar run");
    }

}

/**
 * @author: xuqiangnj@163.com
 * @date: 2019/4/21 21:51
 * @description: 奔驰车
 */
public class BenzCar implements Car {

    public void drive() {
        System.out.println("BenzCar run");
    }
}

/**
 * @author: xuqiangnj@163.com
 * @date: 2019/4/21 21:53
 * @description: 奥迪车
 */
public class AudiCar implements Car {

    public void drive() {
        System.out.println("AudiCar run");
    }

}

/**
 * @author: xuqiangnj@163.com
 * @date: 2019/4/21 21:49
 * @description: 生产车辆工厂类
 */
public class CarFactory {

    public static Car createCar(String carName) {
        if (carName.equals("BenzCar")) {
            return new BenzCar();
        } else if (carName.equals("BMWCar")) {
            return new BMWCar();
        } else if (carName.equals("AudiCar")){
            return new AudiCar();
        }
        return null;
    }
}

/**
 * @author: xuqiangnj@163.com
 * @date: 2019/4/21 21:54
 * @description: 测试类
 */
public class TestCar {

    public static void main(String[] args) {
        Car car = CarFactory.createCar("BMWCar");
        car.drive();
        car = CarFactory.createCar("BenzCar");
        car.drive();
    }
}

运行结果
在这里插入图片描述
客户端不需要直接使用具体的类,也无需知道工厂是怎样创建所需的具体产品类,隐藏了创建具体实现的细节,客户端只需要传入不同的参数来获取不同产品类,客户端与创建产品过程松耦合,可以在不修改客户端代码来更换和增加新的具体产品类,提高了系统灵活性

使用场景

在具体产品种类不多并且固定的情况下适用

总结

简单工厂所有产品有同一个工厂创建,并且需要判断参数来进行返回对应的产品,既需要判断逻辑,同时也需要创建产品,不符合单一职责原则,在添加和修改产品时,工厂类需要修改代码,不符合开闭原则,简单工厂存在一些不足,使用时需考虑场景是否适用
(转载请注明出处)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值