IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 十万字《源码中的设计模式》之简单工厂模式——接口和抽象类(建议收藏) -> 正文阅读

[Java知识库]十万字《源码中的设计模式》之简单工厂模式——接口和抽象类(建议收藏)

🌲本文收录于专栏《源码中的设计模式》——理论与实战的完美结合

作者其它优质专栏推荐:

📚《技术专家修炼》——搞技术,进大厂,聊人生三合一专栏

📚《leetcode 300题》——每天一道算法题,进大厂必备

📚《糊涂算法》——从今天起,迈过数据结构和算法这道坎

📚《从实战学python》——Python的爬虫,自动化,AI等实战应用(代码开源)

点击跳转到文末领取粉丝福利


哈喽,大家好,我是一条~

国庆正是弯道超车的时候,向大家推荐一本个人觉得写的非常好的书——《redis深度历险 核心原理与应用实践》。

我们接着聊设计模式,新同学可以先看一下《23种设计模式的一句话通俗解读》全面的了解一下设计模式,形成一个整体的框架,再逐个击破。

往期回顾原型模式建造者模式

今天我们一块看一下简单工厂模式,其实他不属于23种设计模式,但为了更好的理解后面的工厂方法抽象工厂,我们还是需要先了解一下。

image-20211004190949835

定义

官方定义

定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

通俗解读

我们不必关心对象的创建细节,只需要根据不同参数获取不同产品即可。

难点:写好我们的工厂。

结构图

代码演示

本文源码:简单工厂模式源码 提取码: qr5h

目录结构

建议跟着一条学设计模式的小伙伴都建一个maven工程,并安装lombok依赖和插件。

并建立如下包目录,便于归纳整理。

pom如下

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>

开发场景

汽车制造工厂,既可以生产跑车,也可以生产SUV,未来还会生产新能源汽车。

代码实现

1.创建抽象产品Car

public abstract class Car {
    public String color;
    abstract void run();
}

2.创建具体产品

SuvCar

public class SuvCar extends Car{
    public SuvCar(){
        this.color="green";
    }

    @Override
    public void run() {
        System.out.println("SuvCar running---------");
    }
}

SportsCar

public class SportsCar extends Car{

    public SportsCar(){
        this.color="red";
    }

    @Override
    public void run() {
        System.out.println("SportsCar running-------");
    }
}

3.创建静态工厂

在简单工厂模式中用于被创建实例的方法通常为静态方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)

/**
 * 简单/静态工厂,少数产品
 */
public class CarFactory {

   public static Car getCar(String type){
        if (type.equals("sport")){
            return new SportsCar();
        }else if (type.equals("suv")){
            return new SuvCar();
        }else {
            return null;
        }
    }
}

4.编写测试类

public class MainTest {
    public static void main(String[] args) {
        SportsCar sport = (SportsCar) CarFactory.getCar("sport");
        sport.run();
        System.out.println(sport.color);
    }
}

5.输出结果

接口和抽象类

补充一个知识

接口和抽象类有什么区别?

什么时候用接口,什么时候用抽象类?

接口和抽象类有什么区别?

  • 接口是针对方法的整合,抽象类是针对子类的整合。
  • 人有男人,女人,人是抽象类。人可以吃东西,狗也可以吃东西,吃东西这个动作是接口。
  • 接口可以多继承,抽象类不行。
  • 接口中基本数据类型为static, 而抽类象不是。
  • 抽象类有构造器,方法可以实现,除了不能被实例化,和普通类没有区别,接口不是。

什么时候用接口,什么时候用抽象类?

  • 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
  • 再简单点说,有属性定义的时候,用抽象类,只有方法的时候,用接口。

应用场景

  • 工厂类负责创建对的对象比较少,因为不会造成工厂方法中的业务逻辑过于复杂

  • 客户端只知道传入工厂类的参数,对如何创建对象不关心

  • 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

总结

优点

  • 通过工厂类,无需关注生产的细节,只需要传递对应参数即可。
  • 可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。

缺点

  • 违背开闭原则,扩展不易。
  • 工厂类职责过重,一旦异常,系统瘫痪。
  • 无法动态的增加产品,扩展困难。

问题:在不修改的工厂的前提下,怎么生产新能源汽车?下一节的工厂方法模式给大家讲解。

粉丝福利

📚Java:1.5G学习资料——回复「资料」
📚算法:视频书籍——回复「算法」

👇 点击下方卡片 关注后回复 关键词 👇
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:04:30  更:2021-10-06 12:05:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:51:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码