前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >设计模式 (二)工厂模式(提供代码,浅显易懂)

设计模式 (二)工厂模式(提供代码,浅显易懂)

作者头像
一写代码就开心
发布2022-06-19 15:56:50
发布2022-06-19 15:56:50
31500
代码可运行
举报
文章被收录于专栏:java和pythonjava和python
运行总次数:0
代码可运行

目录

1 为什么使用工厂模式

之前学的是单例模式,就是一个系统项目里面,只能有类的一个对象;

1.1 案例引入工厂模式

我们造车,有一个接口是车car,创建奥迪类,实现car接口,创建宝马类,实现car接口,再写一个工厂类car_factory类,这个里面写对应的方法,每一个方法代表创建一个车的对象;

所以我们以后造其他的车的时候,不仅得自己创建一个类继承car接口,还得修改工厂类car_factory类,里面新增一个方法去创建车的对象,所以修改的地方比较的多;

我们就得使用工厂模式;

2 简单工厂模式

● 1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式 ● 2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) ● 3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式

代码语言:javascript
代码运行次数:0
复制
比如创建不同车的对象,你要从这个工厂创建什么类型车,得在这个工厂加,
这个就是简单工厂模式


public class PizzaFactory {
    public Pizza createPizza(String orderType) {
        Pizza pizza = null;
        switch (orderType) {
            case "cheese":
                pizza = new CheesePizza();
                break;
            case "greek":
                pizza = new GreekPizza();
                break;
            case "pepper":
                pizza = new PepperPizza();
                break;
            default:
                break;
        }
        return pizza;
    }
}

3 静态工厂模式

静态工厂模式也是简单工厂模式的一种,只是将工厂方法改为静态方法;

代码语言:javascript
代码运行次数:0
复制
public class PizzaFactory {
    public static Pizza createPizza(String orderType) {
        // ...
    }
}

以后使用这个工厂,就不需要创建这个对象之后使用里面的方法了,而是直接使用类调用静态方法就可以了;

3 工厂方法模型

3.1 需求引入工厂方法模式

要从工厂里面,拿出不同型号的宝马车,不同型号的奥迪车;

3.2 工厂方法模式

工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类

就是写一个抽象类,这个就是工厂的抽象类,不同的工厂都继承这个抽象类,实现里面的方法,方法里面写不同的逻辑,比如奥迪工厂继承这个car抽象类,宝马工厂继承这个car抽象类,奥迪工厂,宝马工厂都重写car抽象类里面的方法,方法里面的逻辑就是根据不同的型号创建不同的车;

相当于又提了一层;

3.1 简单工厂与工厂方法区别

简单工厂就是所有产品都由一个工厂类一个方法来创建,而工厂方法将工厂的职责也进行细化了,每种产品都由自己特定的工厂来生产,这也是单一职责原则的体现。

4 抽象工厂模式

● 1)抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 ● 2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合 ● 3)从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象) ● 4)将工厂抽象成两层,AbsFactory(抽象工厂)和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展;

代码语言:javascript
代码运行次数:0
复制
抽象工厂:
其实就是一个接口,里面的方法有多个,比如一个方法是创建车的方法,一个是
创建飞机的方法;
类A 实现这个接口,重写这两个方法,那么就可以获得创建车和飞机的功能


工厂方法:
其实就是一个接口,里面只有一个方法,其他类实现这个接口,只能实现一个功能

5 小结

● 1)工厂模式的意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性 ● 2)三种工厂模式:简单工厂模式(静态工厂方法也是简单工厂模式的一种)、工厂方法模式、抽象工厂模式 ● 3)设计模式的依赖抽象原则 ○ 创建对象实例时,不要直接 new 类,而是把这个 new 类的动作放在一个工厂的方法中并返回。有的书上说,变量不要直接持有具体类的引用不要让类继承具体类,而是继承抽象类或者是实现 interface(接口) ○ 不要覆盖基类中已经实现的方法

6 三者区别

  • 1 简单工厂: 就是一个工厂类里面什么什么都生产,以后就新增一个要创建 的对象,就要在这个工厂里面添加,以后这个工厂会越来越大;不好维护;
  • 2 工厂方法:就是将工厂进行抽象,是有多个工厂了,但是每个工厂只能生产一个东西对象,多个工厂都继承一个基类,以后新增了要创建的对象,那么只需要新增一个工厂类就可以了;
  • 3 抽象工厂: 就是将工厂进行抽象,一个工厂可以生产多个东西了,多个工厂都继承一个基类,以后新增了要创建的对象,那么只需要新增一个工厂类就可以了;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 为什么使用工厂模式
    • 1.1 案例引入工厂模式
  • 2 简单工厂模式
  • 3 静态工厂模式
  • 3 工厂方法模型
    • 3.1 需求引入工厂方法模式
    • 3.2 工厂方法模式
    • 3.1 简单工厂与工厂方法区别
  • 4 抽象工厂模式
  • 5 小结
  • 6 三者区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档