Android开发Android开发经验谈Android技术知识

简单工厂模式

2018-12-07  本文已影响18人  Jackson杰

一 介绍

所谓工厂,就是生产产品的,那么对于代码的工厂应该怎么理解呢?
简单工厂模式属于创建性模型,但不属于23种GOF设计模式之一。简单工厂模式虽然不是一个标准的设计模式,但是它常用了,所以掌握好它,就当是学习设计模式的热身吧。

二 定义

提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体类。

三 模拟场景

现在模拟一个汽车的生产工厂,有两个汽车生产工厂,分别生产Audi和Benz汽车,现在用简单工厂模式来模拟实现过程。
简单工厂模式的UML图如下所示:

根据UML图,简单工厂模式的实现步骤为

1 创建一个接口,模拟汽车工厂汽车生产的核心过程。
public interface CarProduct {
    void productCar();
}

2 创建两个汽车生产工厂,分别生产Audi和Benz汽车。

Audi生产过程

public class AudiCarFactory implements CarProduct {
    @Override
    public void productCar() {
        System.out.println("生产了一辆Adui车");
    }
}

Benz生产过程

public class BenzCarFactory implements CarProduct {
    @Override
    public void productCar() {
        System.out.println("生产了一辆Benz车");
    }
}

如果不用简单工厂模式,如果客户需要一台Audi和Benz汽车,则实现过程如下:
客户端实现:

 // 生产Audi汽车
 AudiCarFactory audiCarFactory=new AudiCarFactory();
 audiCarFactory.productCar();
 // 生产Benz汽车
 BenzCarFactory benzCarFactory=new BenzCarFactory();
 benzCarFactory.productCar();

有什么问题呢,可以看到,两个工厂的实现,都在客户端暴露出来了。假设你有很多的客户,每个客户都是这种操作,如果生产汽车的工艺提升了,也就是说AudiCarFactory这个类发生了变化,导致new的时候必须要变化时,你就不得不到每个客户那修改。实际上是耦合比较高的表现。

下面用简单工厂实现:

3 建立生产工厂

public class CarFactory {

    public CarProduct getCarFactory(String type) {
        if (type == null) {
            return null;
        }
        switch (type) {
            case "audi":
                return new AudiCarFactory();
            case "benz":
                return new BenzCarFactory();
            default:
                return null;
        }

    }

}

4 客户端实现

 // 得到工厂对象
        CarFactory carFactory=new CarFactory();
        // 生产Audi汽车
        AudiCarFactory audiCarFactory= (AudiCarFactory) carFactory.getCarFactory("audi");
        audiCarFactory.productCar();
        // 生产Benz汽车
        BenzCarFactory benzCarFactory= (BenzCarFactory) carFactory.getCarFactory("benz");
        benzCarFactory.productCar();

以上实现了简单工厂模式,可以看到,在客户端不用进行new操作就可以获取实例,实现了解耦,实现简单,如果要新增一个实例,只要新增一个实现类和修改工厂方法即可,客户端无需关心实现类。

上一篇 下一篇

猜你喜欢

热点阅读