工厂模式

79 阅读2分钟

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

应用实例:  1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Android里的Bitmap创建方式,调用者只需要知道创建bitmap的方法,而不需要关心复杂的创建过程;

优点:  1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点: 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

实现

我们将创建一个 Car 接口和实现 Car 接口的实体类。下一步是定义工厂类 CarFactory

FactoryPatternDemo 类使用 CarFactory 来获取 Car 对象。它将向 CarFactory 传递信息(AutoCar / Bus / Truck),以便获取它所需对象的类型。

PatternFactory.png

// 汽车接口
interface Car

// 具体汽车类型
class AutoCar implements Car
class Bus implements Car
class Truck implements Car

class CarFactory{

 // 生产各种汽车的方法
public static Car getCar(String type){

    if(type == null){
        return null;
    }
    if(type.equalsIgnoreCase("AutoCar")){
        return new AutoCar();
    } else if(type.equalsIgnoreCase("Bus")){
        return new Bus();
    } else if(type.equalsIgnoreCase("Truck")){
        return new Truck();
    }
    return null;

}

class FactoryPatternDemo{

     public static void main(String[] args) {
         CarFactory carFactory = new CarFactory();

         // 使用工厂生产各种汽车
         Car autoCar = carFactory.getCar("autoCar");
         Car bus = carFactory.getCar("bus");
         Car truck = carFactory.getCar("truck");

     }
}

注:代码是伪代码,旨在说明关系