【设计模式深度剖析】【A】【创建型】【对比】| 工厂模式重点理解产品族的概念

news2024/11/17 0:33:23

回 顾:创建型设计模式

1.单例模式👈️

2.工厂方法模式👈️

3.抽象工厂模式👈️

4.建造者模式👈️

5.原型模式👈️

👈️上一篇:原型模式    |   👉️下一篇:代理模式

目录

  • 创建型模式对比
  • 概览
  • 1. 工厂方法模式
    • 类图
    • 1.1 抽象工厂角色:SuperManFactory:
    • 1.2 具体工厂类
      • 1.2.1 某具体工厂类:AdultSuperManFactory.java
      • 1.2.2 某具体工厂类:ChildSuperManFactory.java
    • 1.3 抽象产品角色:ISuperMan.java
    • 1.4 具体产品角色
      • 1.4.1 某具体产品类:AdultSuperMan.java
      • 1.4.2 某具体产品类:ChildSuperMan.java
    • 1.5 测试类:DemoTest.java
  • 2. 建造者模式
    • 类图
    • 2.1 抽象建造者:Builder.java
    • 2.2 具体建造者角色
      • 2.2.1 某具体建造者:AdultSuperManBuilder.java
      • 2.2.2 某具体建造者:ChildSuperManBuilder.java
    • 2.3 产品角色类:SuperMan.java
    • 2.4 导演者、指挥官角色:Director.java
    • 2.5 测试类:DemoTest.java
  • 3. 抽象工厂模式
    • 类图
    • 3.1 抽象工厂角色:HeroFactory.java
    • 3.2 具体工厂角色
      • 3.2.1 某具体工厂:AdultHeroFactory.java
      • 3.2.2 某具体工厂:ChildHeroFactory.java
    • 3.3 抽象产品-超人类:ISuperMan.java
      • 3.3.1 具体产品:AdultSuperMan.java
      • 3.3.2 具体产品:ChildSuperMan.java
    • 3.4 抽象产品-蜘蛛侠类:ISuperMan.java
      • 3.4.1 具体产品:AdultSpiderMan.java
      • 3.4.2 具体产品:ChildSpiderMan.java
    • 3.5 测试类

创建型模式对比

本文示例源码

创建型模式包括单例模式工厂方法模式抽象工厂模式建造者模式原型模式,这些模式都能够提供对象的创建和管理职责。

其中:

  1. 单例模式和原型模式非常容易理解,单例模式是在内存中保持只有一个对象;
  2. 原型模式是通过复制的方式产生一个新的对象,这两个模式不容易混淆,在此不做对比。

工厂方法模式抽象工厂模式建造者模式具有较多的相似性,它们之间的区别如下。

  1. 工厂方法模式注重的是整体对象的创建方法
  2. 建造者模式注重的是部件构建的过程,旨在通过一步步精确构造,创建出一个复杂的对象。
  3. 抽象工厂模式实现对产品家族的创建,抽象工厂模式不关心构建过程,只关心什么产品由什么工厂生产即可

下面分别使用工厂方法模式、建造者模式和抽象工厂模式制造超人,通过对比可以清晰地认识它们之间的差别。

工厂方法模式通过不同的工厂生产不同的超人,主要注重创建方法。

建造者模式则需要通过不同的建造者组装超人的各部分组件,然后通过导演类调用建造者的具体建造方法建造超人,最后通过建造者返回超人。建造者模式注重创建的过程。

抽象工厂模式通过不同的工厂生产一系列超级英雄,注重产品族的完整性

当一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。(多个产品族1,2,3,产品族4… ,每个产品族都有A、B、C等等产品),
如果产品族中只有一种产品,则抽象工厂模式就退化为工厂方法模式

建造者角色抽象了产品各个属性的配置方法,并为客户端提供build()方法,按需构建所需对象。

抽象工厂模式针对的是生产不同产品类型,但是这些产品类型有不同的族别(或者叫做等级之类的),

比如生产汽车、摩托车,这是两种产品,如果仅仅生产这两种产品类型(也可以理解为笼统的、不区分产品族,或者说没有产品族的概念,或者说仅有一种产品族),使用工厂方法模式即可;

但是如果有了族别的差别,比如:运动型(Sporty)一族、豪华型(Luxury)一族、越野型(Off-Road)一族、经济型(Economy)一族、城市型(Urban)一族、旅行型(Touring)一族、复古型(Retro)一族,每一族都有对应的汽车产品和摩托车产品这种多种产品族的场景,每种产品族有对应的产品类型,此种情况,需要使用抽象工厂模式

在汽车和摩托车这两个产品类型中,除了运动型(Sporty)之外,还可以抽象出多种共有的产品族,这些产品族通常基于车辆的用途、风格、功能或者性能来划分。以下是一些示例:

  1. 豪华型(Luxury)
    • 豪华型汽车通常具有高级的内饰、舒适的座椅、先进的驾驶辅助系统和高级的音响系统。
    • 豪华型摩托车也追求同样的豪华体验,可能包括高级材料、精细的工艺、舒适的骑行位置和高级的电子设备。
  2. 越野型(Off-Road)
    • 越野型汽车通常具有强大的动力系统、高离地间隙、四驱系统以及适合越野驾驶的轮胎和悬挂系统。
    • 越野型摩托车(也称为冒险型或越野摩托车)也拥有类似的特性,用于穿越崎岖的地形和越野驾驶。
  3. 经济型(Economy)
    • 经济型汽车旨在提供高效、省油的驾驶体验,通常具有较小的排量、较轻的车身和较低的维护成本。
    • 经济型摩托车也注重燃油效率和成本控制,适合日常通勤和短途旅行。
  4. 城市型(Urban)
    • 城市型汽车通常设计紧凑、易于停放,并且具有良好的城市驾驶性能,如灵活的操控和快速的加速。
    • 城市型摩托车(也称为街车或城市通勤摩托车)也适合城市环境,提供轻便、灵活的驾驶体验。
  5. 旅行型(Touring)
    • 旅行型汽车拥有宽敞的内部空间、舒适的座椅和大量的储物空间,适合长途旅行和多人出行。
    • 旅行型摩托车(也称为长途摩托车或巡航摩托车)也提供了舒适的骑行环境、大量的储物空间和长途骑行的稳定性。
  6. 复古型(Retro)
    • 复古型汽车和摩托车都采用了经典的设计元素和风格,旨在唤起人们对过去的怀念和向往。

这些产品族都是汽车和摩托车共有的,可以根据市场需求和产品定位来设计和生产。通过使用抽象工厂模式,可以方便地管理和扩展这些产品族,以满足不同客户的需求。
但,如果只是简单的一个产品族,或者未区别产品族的情况,工厂方法模式即可满足需求。

概览

  • 工厂方法模式
    • 使用工厂方法模式制造超人,管理一个产品族产品生产
  • 建造者模式
    • 使用建造者模式制造超人:构造超人各个部分
  • 抽象工厂模式
    • 使用抽象工厂模式制造超人和蜘蛛侠,管理不同产品族产品生产

1. 工厂方法模式

本示例源码

类图

下述内容用于实现任务描述:使用工厂方法模式制造超人,其整体类图如下:

在这里插入图片描述

1.1 抽象工厂角色:SuperManFactory:

上层工厂接口,定义生产产品的标准,也就是定义了一个接口方法,生产超人的方法。

而且抽象工厂角色类,只规定标准,定义生产产品的方法,

它不关心具体怎样生产,那是具体工厂类该干的事情。

实现类也就是具体工厂类按照标准去实现即可。

public interface SuperManFactory {
    // 生产超人
    ISuperMan createSuperMan();
}

1.2 具体工厂类

实现抽象工厂,某具体工厂,会创建某具体产品实例

1.2.1 某具体工厂类:AdultSuperManFactory.java

某具体工厂类:成年超人工厂类,生产成年超人

public class AdultSuperManFactory implements SuperManFactory {
    // 制作成年超人
    @Override
    public ISuperMan createSuperMan() {
        return new AdultSuperMan();
    }
}

1.2.2 某具体工厂类:ChildSuperManFactory.java

某具体工厂类:未成年超人工厂类,生产未成年超人

public class ChildSuperManFactory implements SuperManFactory {
    // 制造未成年人超人
    @Override
    public ISuperMan createSuperMan() {
        return new ChildSuperMan();
    }
}

1.3 抽象产品角色:ISuperMan.java

抽象产品接口,规定了产品该有的功能,而不关心该功能的具体实现,

怎样实现该功能,那是具体产品类的事情,

实现类也就是具体产品类按照规定的标准去实现该功能即可。

public interface ISuperMan {
    // 超人的特殊能力
    void specialTalent();
}

1.4 具体产品角色

对抽象产品要求的标准(抽象方法)进行具体实现

1.4.1 某具体产品类:AdultSuperMan.java

某具体产品类,成年超人产品类,实现了抽象产品接口,完成了接口规定的方法

public class AdultSuperMan implements ISuperMan {

    @Override
    public void specialTalent() {
        // 实现特殊能力
        System.out.println("成年超人力大无穷、可以飞行!");
    }
}

1.4.2 某具体产品类:ChildSuperMan.java

某具体产品类,未成年超人产品类,实现了抽象产品接口,完成了接口规定的方法

public class ChildSuperMan implements ISuperMan {

    @Override
    public void specialTalent() {
        // 实现特殊能力
        System.out.println("小超人可以快速运动");
    }
}

1.5 测试类:DemoTest.java

测试抽象工厂类:

抽象工厂定义了产品生产方法;

具体工厂实现抽象工厂接口,实现了产品实例生产的方法。

public class DemoTest {
    public static void main(String[] args) {
        HeroFactory adultFactory = new AdultHeroFactory();

        ISuperMan adultSuperMan = adultFactory.createSuperMan();
        ISpiderMan adultSpiderMan = adultFactory.createSpiderMan();
        adultSuperMan.specialTalent();
        adultSpiderMan.launchSilk();

        System.out.println("--------------------");
        
        HeroFactory childFactory = new ChildHeroFactory();
        ISuperMan childSuperMan = childFactory.createSuperMan();
        ISpiderMan childSpiderMan = childFactory.createSpiderMan();
        childSuperMan.specialTalent();
        childSpiderMan.launchSilk();
    }
}
/* Output:
成年超人力大无穷、能飞行
成年蜘蛛侠发射出100米长的蛛丝
--------------------
未成年超人快速移动
幼年蜘蛛侠发射出5米长的蛛丝
*///~

2. 建造者模式

本示例源码

类图

下述内容用于实现任务描述:使用建造者模式制造超人,其整体类图如下:

在这里插入图片描述

2.1 抽象建造者:Builder.java

抽象建造者(Builder)角色,抽象了所有属性配置的方法,并提供build()方法,供客户端调用按需获取所需产品实例。

public abstract class Builder {
    protected final SuperMan superMan = new SuperMan();
    
    // 建造身体
    public abstract void setBody();

    // 建造能力
    public abstract void setSpecialTalent();

    // 建造标志
    public abstract void setSpecialSymbol();

    // 获得创建好的超人
    public SuperMan build() {
        return this.superMan;
    }
}

2.2 具体建造者角色

2.2.1 某具体建造者:AdultSuperManBuilder.java

某具体建造者,成年超人构建者,按照抽象建造者的标准提供具体实现,来构建成年超人

public class AdultSuperManBuilder extends Builder {

    @Override
    public void setBody() {
        superMan.setBody("强壮的身体");
    }

    @Override
    public void setSpecialTalent() {
        this.superMan.setSpecialTalent("可以飞行");
    }

    @Override
    public void setSpecialSymbol() {
        superMan.setSpecialSymbol("胸前带S标记");
    }
}

2.2.2 某具体建造者:ChildSuperManBuilder.java

某具体建造者,未成年超人构建者,按照抽象建造者的标准提供具体实现,来构建未成年超人

public class ChildSuperManBuilder extends Builder {

    @Override
    public void setBody() {
        this.superMan.setBody("灵敏的身子");
    }

    @Override
    public void setSpecialTalent() {
        this.superMan.setSpecialTalent("快速运动");
    }

    @Override
    public void setSpecialSymbol() {
        this.superMan.setSpecialSymbol("胸前带小S标记");
    }
}

2.3 产品角色类:SuperMan.java

产品(Product)角色,超人类

public class SuperMan {
    @Getter
    @Setter
    // 超人的身体
    private String body;
    @Getter
    @Setter
    // 超人的特殊能力
    private String specialTalent;
    @Getter
    @Setter
    // 超人的标志
    private String specialSymbol;

    @Override
    public String toString() {
        return this.getBody() + "," +
                this.getSpecialTalent() + "," +
                this.getSpecialSymbol();
    }
}

2.4 导演者、指挥官角色:Director.java

客户端,调用建造者实例的方法来获得所需对象

public class Director {
    private Builder builder;

    public SuperMan buildSuperMan(String type) {
        if (type.equals("child")) {
            builder = new ChildSuperManBuilder();
        } else if (type.equals("adult")) {
            builder = new AdultSuperManBuilder();
        } else {
            return null;
        }
        builder.setBody();
        builder.setSpecialTalent();
        builder.setSpecialSymbol();
        return builder.build();
    }
}

2.5 测试类:DemoTest.java

package com.polaris.designpattern.list1.creational.comparison.builder;

public class DemoTest {
    public static void main(String[] args) {
        Director director = new Director();
        SuperMan adultSuperMan = director.buildSuperMan("adult");
        System.out.println("成年超人:" + adultSuperMan);

        SuperMan childSuperMan = director.buildSuperMan("child");
        System.out.println("小超人:" + childSuperMan);
    }
}

/* Output:
成年超人:强壮的身体,可以飞行,胸前带S标记
小超人:灵敏的身子,快速运动,胸前带小S标记
*///~

3. 抽象工厂模式

本示例源码
这里的示例中,有两个产品族:成年和未成年的英雄,每个产品族工厂都能创建超人和蜘蛛侠两类产品

类图

下述内容用于实现任务描述:使用抽象工厂模式制造超人和蜘蛛侠,其整体类图如下:

在这里插入图片描述

3.1 抽象工厂角色:HeroFactory.java

约定了生产两种产品,超人和蜘蛛侠这两种产品

public interface HeroFactory {
    // 生产超人
    ISuperMan createSuperMan();

    // 生产蜘蛛侠
    ISpiderMan createSpiderMan();
}

3.2 具体工厂角色

3.2.1 某具体工厂:AdultHeroFactory.java

针对成年英雄产品族,生产成年英雄,

实现生产超人和蜘蛛侠这两种产品的方法,

因此该工厂生产成年(产品族)的超人和蜘蛛侠

public class AdultHeroFactory implements HeroFactory {

    @Override
    public ISuperMan createSuperMan() {
        return new AdultSuperMan();
    }

    @Override
    public ISpiderMan createSpiderMan() {
        return new AdultSpiderMan();
    }
}

3.2.2 某具体工厂:ChildHeroFactory.java

针对未成年英雄产品族,生产未成年英雄,

实现生产超人和蜘蛛侠这两种产品的方法,

因此该工厂生产未成年(产品族)的超人和蜘蛛侠

public class ChildHeroFactory implements HeroFactory {

    @Override
    public ISuperMan createSuperMan() {
        return new ChildSuperMan();
    }

    @Override
    public ISpiderMan createSpiderMan() {
        return new ChildSpiderMan();
    }
}

3.3 抽象产品-超人类:ISuperMan.java

规定了超人产品所具备的功能

public interface ISuperMan {
    // 超人的特殊能力
    public abstract void specialTalent();
}

3.3.1 具体产品:AdultSuperMan.java

成年一族产品,超人产品,成年超人产品类

public class AdultSuperMan implements ISuperMan {

    @Override
    public void specialTalent() {
        System.out.println("成年超人力大无穷、能飞行");
    }
}

3.3.2 具体产品:ChildSuperMan.java

未成年一族产品,超人产品,未成年超人产品类

public class ChildSuperMan implements ISuperMan {

    @Override
    public void specialTalent() {
        System.out.println("未成年超人快速移动");
    }
}

3.4 抽象产品-蜘蛛侠类:ISuperMan.java

规定了蜘蛛侠产品所具备的功能

public interface ISpiderMan {
    // 发出蛛丝
    public abstract void launchSilk();
}

3.4.1 具体产品:AdultSpiderMan.java

成年一族产品,蜘蛛侠产品,成年蜘蛛侠产品类

public class AdultSpiderMan implements ISpiderMan {

    @Override
    public void launchSilk() {
        System.out.println("成年蜘蛛侠发射出100米长的蛛丝");
    }
}

3.4.2 具体产品:ChildSpiderMan.java

未成年一族产品,蜘蛛侠产品,未成年蜘蛛侠产品类

public class ChildSpiderMan implements ISpiderMan {

    @Override
    public void launchSilk() {
        System.out.println("幼年蜘蛛侠发射出5米长的蛛丝");
    }
}        

3.5 测试类

public class DemoTest {
    public static void main(String[] args) {
        HeroFactory adultFactory = new AdultHeroFactory();
        ISuperMan adultSuperMan = adultFactory.createSuperMan();
        ISpiderMan adultSpiderMan = adultFactory.createSpiderMan();
        adultSuperMan.specialTalent();
        adultSpiderMan.launchSilk();

        System.out.println("--------------------");

        HeroFactory childFactory = new ChildHeroFactory();
        ISuperMan childSuperMan = childFactory.createSuperMan();
        ISpiderMan childSpiderMan = childFactory.createSpiderMan();
        childSuperMan.specialTalent();
        childSpiderMan.launchSilk();
    }
}
/* Output:
成年超人力大无穷、能飞行
成年蜘蛛侠发射出100米长的蛛丝
--------------------
未成年超人快速移动
幼年蜘蛛侠发射出5米长的蛛丝
*///~

回 顾:创建型设计模式

1.单例模式👈️

2.工厂方法模式👈️

3.抽象工厂模式👈️

4.建造者模式👈️

5.原型模式👈️

👈️上一篇:原型模式    |   👉️下一篇:代理模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年失业率狂飙18.1%,史上最难就业季即将来临,该如何逆袭?_2024年失业潮

【2024年被称为最难就业年,1158万大学生面临难题】 距离2024年毕业季还剩不到4个月,毕业学员将面临空前严峻的就业压力!具国家统 计局的数据显示,1-2月份,16至24岁年轻人的失业率飙到18.1%,也就是说&…

WordPress建站公司模板免费下载

WordPress建站公司 适合提供WordPress建站服务的公司或个体(个人)工作室使用的WordPress建站公司主题模板。 演示 https://www.jianzhanpress.com/?p545 https://www.wpicu.com/jianzhan/ 下载 链接: https://pan.baidu.com/s/11trlwUJq_lW81R_acq4ilA 提取码: r19i

【华为】BFD与静态路由和RIP联用

【华为】BFD与静态路由和RIP联用 实验需求配置AR1AR2AR3AR4效果抓包查看 实验需求 如上图组网所示,在R1上配置到达R4的Loopback0。 4.4.4.4/32网段的浮动静态路由,正常情况下通过R3访问R4。 当R3故障时,自动选路通过R2访问R4的Loopback0;在R…

免费发布web APP的四个途径(Python和R)

免费发布数据分析类🌐web APP的几个途径📱 数据分析类web APP目前用来部署生信工具,统计工具和预测模型等,便利快捷,深受大家喜爱。而一个免费的APP部署途径,对于开发和测试APP都是必要的。根据笔者的经验…

基于地理坐标的高阶几何编辑工具算法(6)——合并相离面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中一个面,点击“合并相离面”工具,绘制一个面,与其他面相交,双击结束后。 应用场景 用于将相离的两个同类型几何面进行合并。 算法输入 待合并的面…

基础编程函数题

1.简单输出整数&#xff1a;本题要求实现一个函数&#xff0c;对给定的正整数N&#xff0c;打印从1到N的全部正整数。 #include <stdio.h> void PrintN ( int N ); int main () { int N; scanf("%d", &N); PrintN( N ); return 0; } void Prin…

温故而知新-Java基础篇【面试复习】

温故而知新-Java基础篇【面试复习】 前言版权推荐温故而知新-基础篇【面试】解决hash冲突的方法try catch finallyException与Error的包结构OOM你遇到过哪些情况&#xff0c;SOF你遇到过哪些情况线程有哪些基本状态?Java IO与 NIO的区别堆和栈的区别对象分配规则notify()和not…

记录踩坑事件 分页查询order by出现重复数据bug

MySQL排序小坑_mysql order by name相同导致排序混乱-CSDN博客 1、问题描述 列表页分页查询出现重复数据。 2、问题排查 排查最终执行sql日志。 select * from tableA where (start_time>2024-04-17 00:00:00) AND (start_time<2024-05-18 00:00:00) ORDER BY sta…

Fastjson漏洞之CVE-2017-18349

前言&#xff1a; 要想理解漏洞原理&#xff0c;首先看看Fastjson是什么&#xff0c;具体用来做什么才能更好的找到可以利用的场景&#xff1a; Fastjson 是一个由阿里巴巴开发的 Java 语言实现的高性能 JSON 解析器和生成器。它具有以下特点: 快速&#xff1a;Fastjson 在序列…

CR80清洁卡都能用在什么地方?

CR80清洁卡&#xff08;也被称为ISO 7810 ID-1清洁卡&#xff09;的规格确实使其在各种需要读取磁条或接触式智能卡的设备中都有广泛的用途。这些设备包括但不限于&#xff1a; ATM自动终端机&#xff1a;当ATM机的磁条读卡器出现故障或读卡不灵敏时&#xff0c;可以使用CR80清…

rabbitMQ本地启动快捷方式

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit COLOR A TITLE 运行RabbitMQ%comspec% /k "C:\Prog…

How to limit request by IP on nginx?

/etc/nginx/conf.d/default.conf 1.Define a limit_req_zone # 定義限流區塊 limit_req_zone $binary_remote_addr zonelimit_zone:10m rate2r/s; limit_req_zone $binary_remote_addr zonelimit_zone:10m rate2r/s; 是一个 Nginx 配置指令&#xff0c;用于定义请求限制区域和…

express.js--生成token(二)

主要作用是访问路由接口时&#xff0c;生成身份权限信息 下载依赖 npm i express-jwt npm i jsonwebtoken 配置管理 config/index.js module.exports {app: {port: process.PORT || 3000,//jwt密钥jwtSecret: jwtSecret,//token过期时间expiresIn: 60 * 60 * 24,} } con…

拼多多暂时超越阿里成为电商第一

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 拼多多的财报又炸裂了&#xff1a; 拼多多发布了第一季度财报&#xff0c;营收868亿&#xff0c;增长了131%&#xff0c;净利润279亿&#xff0c;增长了246%&#xff0c;营销服务收入424亿&#xff0c;也就是商家的…

大语言模型的工程技巧(二)——混合精度训练

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 混合精度训练的示例请参考如下链接&#xff1a;regression2chatgpt/ch11_llm/gpt2_lora_optimum.ipynb 本文将讨论如何利用混合…

windows ssh客户端mobaxterm密码登录到debian12 openssh服务器

1&#xff0c;在debian12生成公钥、秘钥 ssh-keygen -t rsa ~/.ssh/id_rsa 是秘钥&#xff0c;要放到windows的&#xff08;这里先不要放&#xff0c;等转换一下再放&#xff09;&#xff1b; ~/.ssh/id_rsa.pub 是公钥&#xff0c;放在debian12本地就好了&#xff0c; 顺…

初识DataX3.0

目前接到任务&#xff0c;让同步表数据。市面很多同步工具不一一尝试了&#xff0c;信赖阿里&#xff0c;所以调研了一下阿里的dataX,一点点来吧&#xff0c;学习为主 环境准备&#xff1a;linux6.8 python自带的2.7 MySQL 5.7.1 1.先下载&#xff1a; wget http://datax-o…

TG5032CKN是一种高稳定性晶体振荡器

TG5032CKN的输出频率范围为10 MHz至24 MHz&#xff0c;能够在-40C至105C的温度范围内工作&#xff0c;其频率/温度特性为0.110^-6 Max。这表明该设备具有很好的温度稳定性&#xff0c;适合在极端温度条件下使用。TG5032CKN的尺寸为5.03.21.65 mm&#xff0c;可以选择10针或4针封…

iOS App上架全流程及审核避坑指南

App Store作为苹果官方的应用商店&#xff0c;审核严格周期长一直让用户头疼不已&#xff0c;很多app都“死”在了审核这一关&#xff0c;那我们就要放弃iOS用户了吗&#xff1f;当然不是&#xff01;本期我们从iOS app上架流程开始梳理&#xff0c;详细了解下iOS app上架的那些…

番外篇 | YOLOv5更换主干网络之Conformer:首个CNN + Transformer的backbone模型

前言:Hello大家好,我是小哥谈。Transformer和CNN在处理视觉表征方面都有着各自的优势以及一些不可避免的问题。因此,国科大、鹏城实验室和华为研究人员首次将二者进行了融合并提出全新的Conformer模型,其可以在不显著增加计算量的前提下显著提升了基网表征能力。论文已被IC…