美文网首页
工厂设计模式一简单工厂

工厂设计模式一简单工厂

作者: 新征程Dream | 来源:发表于2020-06-27 13:00 被阅读0次

工厂设计模式

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

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

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:是不是觉得工厂模式很简单,这就是所谓的工厂模式之一:简单工厂。后续其他的工厂模式,下篇文章见。

相关文章

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟)工厂模式分为简单工厂,工厂方法,抽象工厂。 简单工厂模式 一个接口,三...

  • 设计模式

    设计模式(视频总结) [TOC] 一、简单工厂模式(Simple Factory) 简单工厂模式: 简单工厂模式属...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 工厂模式理解

    工厂模式分为简单工厂、工厂模式、抽象工厂三种层级概念。简单工厂不属于23种设计模式,抽象工厂才是。 简单工厂 简单...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 2016.06笔记

    iOS设计模式之工厂模式(简单工厂,工厂方法,抽象工厂) 简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

网友评论

      本文标题:工厂设计模式一简单工厂

      本文链接:https://www.haomeiwen.com/subject/umbmfktx.html