设计模式之工厂三姐妹① 简单工厂与工厂模式系列博客

举报
ksh1998 发表于 2021/12/25 22:52:00 2021/12/25
【摘要】 前言: 23个设计模式分为三大类分别是 :创建型,行为型,结构型。 工厂三姐妹属于创建型,从结构的难易上分为 。 简单工厂→工厂方法 →抽象工厂 目录 设计模式场景简单工厂代码结果类图 工厂...

前言:
23个设计模式分为三大类分别是 :创建型,行为型,结构型。
工厂三姐妹属于创建型,从结构的难易上分为 。
简单工厂→工厂方法 →抽象工厂

设计模式场景

根据用户的选择创建对应品牌的汽车实例

简单工厂

代码

结构:
在这里插入图片描述

代码:
car 接口

  package com.kuang.factory.simple;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 汽车接口
 * @date 2021-12-17 9:54
 */
public interface Car {
    /**
      * @Description: 汽车名字
      * @param ${tags}
      * @return ${return_type}
      * @throws
      * @author 康世行
      * @date 2021-12-17 9:54
      */
    void name(String name);
}
car 具体实现类

```java
 package com.kuang.factory.simple;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 特斯拉
 * @date 2021-12-17 9:57
 */
public class Tesla implements Car{
    @Override
    public void name(String name) {
        System.out.println("汽车名字"+name);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
package com.kuang.factory.simple;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 五菱宏光
 * @date 2021-12-17 9:57
 */
public class WuLing implements Car{
    @Override
    public void name(String name) {
        System.out.println("汽车品牌"+name);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
CarFactory 工厂

```java
 package com.kuang.factory.simple;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 简单工厂
 * @date 2021-12-17 10:02
 */
public class CarFactory {

    /**
      * @Description: 根据类型实例不同的对象
      * @param ${tags}
      * @return ${return_type}
      * @throws
      * @author 康世行
      * @date 2021-12-17 10:03
      */
    public static Car createCar(String carType){
        Car car=null;
        //使用switch语句进行选择类型
        switch (carType){
            case "五菱":
                car=new WuLing();
                break;
            case "特斯拉":
                car=new Tesla();
                break;
        }
        return car;
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

客户端

 package com.kuang.factory.simple;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 消费者
 * @date 2021-12-17 9:59
 */
public class Consumer {
    public static void main(String[] args) {
        //使用简单工厂
        Car wuling = CarFactory.createCar("五菱");
        wuling.name("五菱");
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果

在这里插入图片描述

类图

在这里插入图片描述

工厂方法

代码

结构:
在这里插入图片描述

代码:
car 接口

 package com.kuang.factory.method;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 汽车接口
 * @date 2021-12-17 9:54
 */
public interface Car {
    /**
      * @Description: 汽车名字
      * @param ${tags}
      * @return ${return_type}
      * @throws
      * @author 康世行
      * @date 2021-12-17 9:54
      */
    void name(String name);
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

具体汽车品牌实现

 package com.kuang.factory.method;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 特斯拉
 * @date 2021-12-17 9:57
 */
public class Tesla implements Car {
    @Override
    public void name(String name) {
        System.out.println("汽车名字"+name);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
 package com.kuang.factory.method;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 五菱宏光
 * @date 2021-12-17 9:57
 */
public class WuLing implements Car {
    @Override
    public void name(String name) {
        System.out.println("汽车品牌"+name);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

carFactory工厂接口

 package com.kuang.factory.method;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.method
 * @Description: 汽车工厂
 * @date 2021-12-17 11:05
 */
public interface CarFactory {
    /**
      * @Description: 获取汽车
      * @param ${tags}
      * @return ${return_type}
      * @throws
      * @author 康世行
      * @date 2021-12-17 11:06
      */
    public Car getCar(String name);
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

具体工厂实现

 package com.kuang.factory.method;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.method
 * @Description: 五菱宏观工厂
 * @date 2021-12-17 11:10
 */
public class WuLingFactory implements CarFactory{
    @Override
    public Car getCar(String name) {
        System.out.println(name+"工厂");
        return new WuLing();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
 package com.kuang.factory.method;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.method
 * @Description: 特斯拉工厂
 * @date 2021-12-17 11:12
 */
public class TeslaFactory implements CarFactory{
    @Override
    public Car getCar(String name) {
        System.out.println(name+"工厂");
        return new Tesla();
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

客户端

 package com.kuang.factory.method;

import com.kuang.factory.simple.CarFactory;

/**
 * @author 康世行
 * @Title:
 * @Package com.kuang.factory.simple
 * @Description: 消费者
 * @date 2021-12-17 9:59
 */
public class Consumer {
    public static void main(String[] args) {
        Car car1 = new WuLingFactory().getCar("五菱宏观");
        car1.name("五菱宏光");
        Car car2 = new TeslaFactory().getCar("特斯拉");
       car2.name("特斯拉");
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

结果

在这里插入图片描述

类图

在这里插入图片描述

思考:

一,简单工厂为什么不是一个设计模式
二,工厂方法模式的缺点

感谢阅读,支持下小编一键三连。小编下篇博客给出小编对于这两个思考的思考

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/122015866

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。