设计模式之工厂模式

简介: 在古代的时候,人们身上穿的衣服其实是人们自己使用织布机织的,随着社会的发展,一直到了现代社会,我们身上穿的衣服基本上都是在工厂里面做好了,直接拿到市面上去卖就好了,对于我们身上的衣服而言,由一开始的手工制作再到今天的工厂生产,这就是工厂模式。

一、认识工厂模式


工厂模式主要分为三个:


(1)简单工厂模式:我们的衣服在工厂里面去建造,这就是简单工厂模式


(2)工厂方法模式:随着社会的发展,用户现在想要一身黑色的衣服、也想要一身红色的衣服。于是乎,我们开始定义一个总厂,下面有很多具体的工厂来生产不同颜色的衣服。


(3)抽象工厂模式时代:随着客户的要求越来越高,不同颜色衣服还要带各种颜色的帽子去搭配。于是这个工厂又开始生产衣服又要去生产帽子。


我们这里所说的工厂模式就是指的前两种:简单工厂模式和工厂方法模式

为了演示方便,(其实我是借鉴了很多别人的文章),我们先从手动织布时代开始:


二、手动织布时代


我们先用一张图来看一下手动织布时代的关系:

v2-0b76191a8bb291bf9604c0c5998f32be_1440w.jpg

第一步:有一个cloth类


public class Cloth {
    //在古代,布是需要我们手动去织的。
    public Cloth() {
        System.out.println("手动去织布。。。。");
    }
}


第二步:人们要想使用,需要手动去new出一个


public class User { 
    //手动织布时代:需要什么衣服,我们要自己new一个对象
    Cloth cloth=new Cloth();
}

手动织布时代样子很简单,但是时间久了,人越来越多,衣服也会越来越多,我们创建的对象也会越来越多,代码会显得格外臃肿。于是乎,人们开始创建了工厂,我们不必关系自己如何去生产布匹,而是交给工厂


三、简单工厂时代


我们在使用一张图来表示:

v2-1b6da8b5a260a0d9a61d367618f2c9a4_1440w.jpg

从上面我们可以看到简单工厂模式主要有四个角色:


(1)客户(User):用来指定生产什么衣服,提要求的

(2)工厂(factory):生产所有衣服的工厂

(3)抽象产品(abstract product):定义所有衣服的抽象类,可以描写所有衣服的共同属性

(4)具体产品(product):抽象衣服的具体实现


下面我们代码来实现一下:

第一步:定义抽象类

abstract  class Cloth {
    public Cloth() {
    }
}

第二步:具体产品类

public class RedCloth extends Cloth {
    public RedCloth() {
        System.out.println("生产红色衣服。。。");
    }
}

还有黑色衣服:

public class BlackCloth extends Cloth{
    public BlackCloth() {
        System.out.println("生产黑色衣服。。。");
    }
}

第三步:工厂类

public class ClothFactory {
    public Cloth createCloth(String type) {
        switch (type) { 
            case "red":
                return new RedCloth();
            case "black":
                return new BlackCloth();
            default:
                break;
        }
        return null;
    }
}

第四步:用户

public class User { 
    public static void main(String[] args) {
        //简单工厂时代:东西都交给工厂来生产
        ClothFactory factory=new ClothFactory();
        //接下来我们需要什么直接就去让工厂来创建
        factory.createCloth("red");
        factory.createCloth("black");
    }
}


四、工厂方法模式


随着社会的发展,发现用户需要衣服的颜色也开始变得越来越多了,一般都是花里胡哨的那些,这时候有就麻烦了,因为每次新增加一种颜色的衣服时候,我们都需要在工厂里面添加一个新的case语句。这样颜色越来越多,工厂类开始变得臃肿起来。于是为了不违背开闭原则,开始对工厂类有一个划分。

下面使用一张图来表示一下:

v2-05496005b1c28c14ab34df6b836c2494_1440w.jpg

从上面我们可以看到主要有五个角色:


(1)用户:提需求,使用衣服

(2)工厂接口:我们不再一个工厂去生产所有衣服了,而是定义一个抽象接口,这样有新的需求的时候,我们就可以把这些工厂的共同操作提取出来

(3)具体工厂:具体工厂对职责又进行了细化分,每一个工厂只负责一种产品

(4)抽象产品:产品的所有抽象类

(5)具体产品:具体的每一种衣服。


下面看代码的具体实现:

第一步:定义一个抽象产品类cloth

abstract  class Cloth {
    public Cloth() {}
}

第二步:具体的产品类

public class RedCloth extends Cloth {
    public RedCloth() {
        System.out.println("生产红色衣服。。。");
    }
}

还有黑色衣服

public class BlackCloth extends Cloth{
    public BlackCloth() {
        System.out.println("生产黑色衣服。。。");
    }
}

第三步:工厂接口

interface  ClothFactory {
    public Cloth createCloth();
}

第四步:具体工厂

public class RedClothFactory implements ClothFactory {
    @Override
    public RedCloth createCloth() {
        return new RedCloth();
    }
}

还有一个黑色衣服工厂

public class BlackClothFactory implements ClothFactory{
    @Override
    public BlackCloth createCloth() {
        return new BlackCloth();
    }
}

第五步:用户

public class User { 
    public static void main(String[] args) {
        //工厂方法时代:
        RedClothFactory redClothFactory=new RedClothFactory();
        RedCloth redcloth= redClothFactory.createCloth();
        BlackClothFactory blackClothFactory=new BlackClothFactory();
        BlackCloth blackcloth= blackClothFactory.createCloth();
    }
}

其实现在还不能满足我们的需求,因为随着时代的发展,人们的需求变得更加复杂,比如说我红色衣服要10000件,但是黑色衣服只需要10件,这样的差别实在太大了,而我们仍然需要建造一个工厂。而且,还有一些用户买衣服的时候还需要选择是不是再购买一双鞋子。所以上面的这个模式能够解决一些简单的情况,但是比较复杂的情况依然不能解决。


不过办法总是比问题要多,下一遍博客主要就是解决这个问题,也就是抽象工厂模式。

相关文章
|
设计模式 Java C++
设计模式之工厂模式详解和应用
设计模式之工厂模式详解和应用
70 0
|
7月前
|
设计模式 消息中间件 Java
设计模式之工厂模式(C++)
设计模式之工厂模式(C++)
94 0
|
7月前
|
设计模式 算法 uml
C++设计模式(工厂模式)
C++设计模式(工厂模式)
113 1
C++设计模式(工厂模式)
|
7月前
|
设计模式 前端开发 API
【设计模式】之工厂模式
工厂模式是一种常用的创建对象的设计模式,它通过封装对象的创建逻辑,提供统一的接口,实现了代码的解耦和可扩展性。在实际开发中,可以根据具体需求选择是否使用工厂模式来创建对象。工厂模式可以应用于任何需要创建对象的场景。通过使用工厂模式,我们可以提高代码的可维护性、可扩展性和可测试性,使得代码更加灵活和易于理解。
79 0
|
设计模式 前端开发 Java
设计模式之工厂模式(1)
工厂模式是一种对象创建型模式,它提供了一种创建对象的最佳实践。在工厂模式中,我们在创建对象时不使用 new 关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂模式可以创建一组相关或不相关的对象。这样就可以将对象的创建和使用解耦。
66 0
|
设计模式
【设计模式】工厂模式
【设计模式】工厂模式
|
设计模式 Java 数据库
设计模式之工厂模式(一)
设计模式之工厂模式
64 0
|
设计模式 SQL 搜索推荐
设计模式之工厂模式(二)
设计模式之工厂模式
115 0
|
设计模式 消息中间件 Java
一起来学设计模式之工厂模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的工厂模式~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 工厂模式 工厂模式是一种常用的设计模式,它提供了一种创建对象的方式,该方式隐藏了对象创建的细节并提供了一个通用的接口,从而使得代码更加灵活和可扩展。在工厂模式中,我们将对象的创建过程封装到一个工厂类中,通过工厂类来创建具体的对象,这样客户端就不需要关心对象的创建过程,只需要调用工厂类提供的接口来获取所需的对象即可。
|
设计模式 Java uml
《设计模式》工厂模式
《设计模式》工厂模式
《设计模式》工厂模式