设计模式——工厂模式

1. 工厂模式概述

在工厂模式中,创建对象不会对外界暴露创建逻辑,而是通过使用一个共同的接口来获取新创建的对象。

在工厂模式中,不需要外界手动创建一个实例,而是通过调用对象工厂的方法,返回该类的实例。

比如我现在想获取一个产品,我只需要调用这个产品的工厂的方法就可以了。

(1) 适用情况

需要根据不同的条件,创建不同的实例对象时,可以考虑使用工厂模式。

(2) 优点

  1. 对于调用者来说,不必关心实例的创建方式,这样可以屏蔽产品的具体实现
  2. 拓展性高,如果需要增加一个产品,只需要拓展一个工厂类就可以

(3) 缺点

如果产品过多,则工厂类也会过多,增加了系统的复杂度。

2. 工厂模式实现

现在我们需要一个汽车工厂,用来创建不同品牌的汽车对象。

(1) 先声明一个汽车接口

public interface Car {
    void declare();
}

(2) 创建各个品牌汽车的实现类

public class Benz implements Car{
    @Override
    public void declare() {
        System.out.println("我是一辆奔驰。");
    }
}

public class BMW implements Car{
    @Override
    public void declare() {
        System.out.println("我是一辆宝马。");
    }
}

public class Audi implements Car{
    @Override
    public void declare() {
        System.out.println("我是一辆奥迪。");
    }
}

(3) 创建汽车工厂

public class CarFactory {
    /**
     * 生产汽车
     *
     * @param brand 汽车品牌
     * @return 汽车
     */
    public Car buildCar(CAR_BRAND brand) {
        switch (brand) {
            case BENZ:
                return new Benz();
            case BMW:
                return new BMW();
            case AUDI:
                return new Audi();
        }
        return null;
    }
}

enum CAR_BRAND {
    BENZ,
    BMW,
    AUDI
}

(4) 使用汽车工厂生产汽车

public class FactoryDemo {
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();
        // 生产一辆奔驰
        Car benz = carFactory.buildCar(CAR_BRAND.BENZ);
        benz.declare();

        // 生产一辆宝马
        Car bmw = carFactory.buildCar(CAR_BRAND.BMW);
        bmw.declare();

        // 生产一辆奥迪
        Car audi = carFactory.buildCar(CAR_BRAND.AUDI);
        audi.declare();
    }
}

运行结果:
image.png

参考鸣谢

工厂模式:https://www.runoob.com/design...

你可能感兴趣的:(设计模式)