工厂设计模式一简单工厂

2020-06-27  本文已影响0人  新征程Dream

工厂设计模式

什么是工厂设计模式呢?我们从名字出发来理解,首先工厂就是生产产品的地方。比如电器工厂,在这个广场可以生产:空调,冰箱,洗衣机。这时,我们需要一台洗衣机来洗衣服。我们应该怎么做呢?当然是告诉厂长,我需要一台洗衣机,你给我生产一下。厂长说好的,没问题。这时候,我们就可以从工厂搬出一台洗衣机了。这样讲,大概明白工厂设计模式的作用了吧。

我们是程序员,所以需要回到代码层面来搞这个工厂设计模式。
第一步:我们需要创建四个对象:洗衣机对象、冰箱对象、空调对象和工厂对象。然后我们需要哪个对象,我们就去创造什么样的对象。

package cn.zl.factory;

// 工厂对象
public class Factory {
    // 冰箱生产线
    public IceBox getIceBox(){
        return new IceBox();
    }
    // 空调生产线
    public AirCondition getAirCondition(){
        return new AirCondition();
    }
    // 洗衣机生产线
    public Washer getWasher(){
        return new Washer();
    }

    public static void main(String[] args) {
        Factory factory = new Factory();
        // 获取一台冰箱
        IceBox iceBox = factory.getIceBox();
        // 获取一台洗衣机
        Washer washer = factory.getWasher();
        // 获取一台空调
        AirCondition airCondition = factory.getAirCondition();
    }
}

class IceBox{
   // 冰箱对象
}
class AirCondition{
    // 空调对象
}
class Washer{
    // 洗衣机对象
}

这样,差不多一个工厂设计模式就算是完成了。但是呢,我们又决定励志做一个优秀的程序员。这样的代码,看起来都像是小学生写的。而且,这个代码的扩展维护性不强。什么叫扩展维护性不强呢?就比如,冰箱行情不好,准备把冰箱线砍掉,换成手机线。我们是不是需要改的很多的地方呢?我们尝试的加入面向对象语言的三大特性中的,其中一特性,多态。来优化一下代码。
改装如下:

package cn.zl.factory;


// 工厂对象
public class Factory {
    // 生产线
    public Product getProduct(String productName) {
        // 生产线
        if (productName.equalsIgnoreCase("IceBox")) {
            return new IceBox();
        } else if (productName.equalsIgnoreCase("AirCondition")) {
            return new AirCondition();
        } else if (productName.equalsIgnoreCase("Washer")) {
            return new Washer();
        } else {
            return null;
        }
    }

    public static void main(String[] args) {
        Factory factory = new Factory();
        // 获取一台冰箱
        Product iceBox = factory.getProduct("IceBox");
        // 获取一台洗衣机
        Product washer = factory.getProduct("Washer");
        // 获取一台空调
        Product airCondition = factory.getProduct("AirCondition");
    }
}

interface Product {
    // 产品接口
}

class IceBox implements Product {
    // 冰箱对象
}

class AirCondition implements Product {
    // 空调对象
}

class Washer implements Product {
    // 洗衣机对象
}

这样写的话,就算我们的流水线,需要替换了,我们只需要把 if分支中的一部分,干掉或者替换掉。是不是很简单。我们这个demo过于简单,所有没有怎么体现出优化后的效果。假设一种情况,我们所有的产品都有一些共同的属性,我们第二中写法的优势,是不是就会凸显出来。我们只需要在接口中,定义就OK。
ps:是不是觉得工厂模式很简单,这就是所谓的工厂模式之一:简单工厂。后续其他的工厂模式,下篇文章见。

上一篇 下一篇

猜你喜欢

热点阅读