乐趣区

关于设计模式:设计模式工厂模式

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();}
}

运行后果:

参考鸣谢

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

退出移动版