工厂模式(Factory Pattern)

【Audio driver】深入解析mixer_paths.xml中的音频通路配置 本文深入解析了Android音频驱动开发中的核心配置文件mixer_paths.xml。文章以高通平台为例,详细阐述了音频通路(FE、BE、DSP、Device)的概念与连接逻辑,并通过实战案例拆解了扬声器与麦克风通路的配置方法、关键控件作用及调试技巧,是理解与定制Android音频系统的实用指南。 阅读详情

目录

定义

工厂模式根据抽象程度的不同分为三种

简单工厂模式

工厂方法模式

抽象工厂模式

工厂模式的优点

工厂模式的缺点

工厂模式的适用场景

关于Java中的工厂模式的一些常见问题

总结


定义

工厂模式是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式主要是为创建对象提供过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂模式根据抽象程度的不同分为三种

1、简单工厂模式(也叫静态工厂模式)

2、工厂方法模式(也叫多形性工厂)

3、抽象工厂模式(也叫工具箱)

简单工厂模式

实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

工厂方法模式

工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。

抽象工厂模式

当有多个抽象角色时使用的工行模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品对象。它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。

工厂方法模式应该在实际中用的较多,我们以工厂方法模式举例。

抽象的产品类:定义car 交通工具类

public interface Car {
    void gotowork();
}

定义实际的产品类,总共定义两个,bike和bus分别表示不同的交通工具类

public class Bike implements Car {
    @Override
    public void gotowork(){
        System.out.println("骑自行车去上班!");
    }
}


public class Bus implements Car {
    @Override
    public void gotowork(){
        System.out.println("坐公交去上班!");
    }
}

定义抽象的工厂接口

public interface ICarFactory {
    Car getCar();
}

 具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类

public class BikeFactory implements ICarFactory {
    @Override
    public Car getCar(){
        return new Bike();
    }
}

public class BusFactory implements ICarFactory {
    @Override
    public Car getCar(){
        return new Bus();
    }
}

简单的测试类,来验证不同的工厂能够产生不同的产品对象。

public class TestFactory {
    @Test
    public void test(){
        ICarFactory factory = null;

        //bike
        factory = new BikeFactory();
        Car bike = factory.getCar();
        bike.gotowork();

        //bus
        factory = new BusFactory();
        Car bus = factory.getCar();
        bus.gotowork();
    }
}

工厂模式的优点

1、一个调用者想创建一个对象,只要知道其名称就可以了,降低了耦合度。

2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。使得代码结构更加清晰。

3、屏蔽产品的具体实现,调用者只关心产品的接口。

工厂模式的缺点

每次增加一个产品时,都需要增加一个具体类和对象实现工厂(这里可以使用反射机制来避免),使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。所以对于简单对象来说,使用工厂模式反而增加了复杂度。

工厂模式的适用场景

1、一个对象拥有很多子类。

2、创建某个对象时需要进行许多额外的操作。

3、系统后期需要经常扩展,它把对象实例化的任务交由实现类完成,扩展性好。

关于Java中的工厂模式的一些常见问题

利用父类的向下转型(使用父类类型的引用指向子类的对象)是可以达到类似于工厂模式的效果的,那为什么还要用工厂模式呢?

把指向子类对象的父类引用赋给子类引用叫做向下转型,如:

class Student extends Person {
    Person s = new Student();
    s = (Student)Person;
}

使用向下转型在客户端实例化子类的时候,严重依赖具体的子类的名字。当我们需要更改子类的构造方法的时候,比如增加一个参数,或者更改了子类的类名,所有的new出来的子类都需要跟着更改。

但如果我们使用工厂模式,我们仅仅需要在工厂中修改一下new的代码,其余项目中用到此实例的都会跟着改,而不需要我们手动去操作。

总结

无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。究竟用哪种设计模式更适合,这要根据具体的业务需求来决定。

解锁RK3588视觉潜能:RGA硬件加速库实战指南 本文深入探讨了如何利用RK3588芯片内置的RGA硬件加速库,解决视觉应用中图像预处理的性能瓶颈。通过实战指南,详细介绍了RGA库在YUV转RGB、图像缩放等核心操作上的应用,相比CPU软处理可大幅降低延迟与CPU占用,从而充分释放RK3588的NPU算力,构建高效的AI视觉预处理流水线。 阅读详情

相关推荐

从零开始掌握机械臂运动控制:原理、建模与实践

本文系统介绍了机械臂运动控制的核心原理与实践方法。从运动学与动力学建模的基础理论出发,详细解析了经典PID控制与现代MPC(模型预测控制)算法的应用,并通过ROS与MATLAB仿真案例,指导读者从零开始实现机械臂的轨迹规划与精准控制,为工业自动化应用提供完整的技术路径。

weixin_29099217的博客 564

工具类与单例设计模式

工具类跟单例设计模式都体现了JAVA 编程语言的封装性: 其中工具类是将类中的方法和属性static,这样就可以不用创造新对象,直接通过类点方法名(属性调取)。 单例设计模式是在类中创造当前类的唯一对象,通过类点获取对象的方法,获取对象后,通过对象点方法名(属性)。 懒汉式: 使用方式:SingleLeman.getInstance().addNumber。 优点:线程安全,调用效率高。 缺点:容易产生安全对象。 public class SingleLemon{ public stat..

weixin_55024483的博客 728

UVM自学笔记3——项目之三——从零开始搭建ahb_sramc验证平台

创建如下所示的目录结构: 2.在tb的文件下:顶层的testbench如下:在tb中,第24行的代码将uvm宏相关的内容include进来,第26行的代码把uvm_pkg包导入进来,然后将agent相关的包(ahb_pkg/sram_pkg),testcase相关的包(uvm_ahb_sram_test_pkg)以及env相关的包(uvm_ahb_sram_env_pkg)都导入进来,在第38行和39行将接口以virtual interface的形式配置给ahb_agent和sramc_agent下

ZhangShuHuai11的博客 9474

黑马程序员---工具类和设计模式

------- Java、.Net、Android培训期待与您交流!-------  一、工具类         需求:定义一个工具类,实现int型数组的打印、获取最值、选择排序、冒泡排序、折 半查找(二分查找)等功能。        思路:        工具类:工具类中不需要有类的特有数据(属性),仅仅用到了类中的方法,那么将方法都static化,直接通过类名调用,而且不需要建立对象,

yufeng47的专栏 1416

10X Genomics单细胞数据分析实战:从FASTQ到UMAP可视化的完整流程

本文详细介绍了10X Genomics单细胞数据分析的完整流程,从FASTQ原始数据处理到UMAP可视化。通过Seurat工具包实现数据质量控制、标准化、降维聚类和细胞注释,特别适合生物信息学新手学习。文章包含可复现的代码示例和常见问题解决方案,帮助研究者快速掌握单细胞测序数据分析的核心技术。

weixin_30952535的博客 535

Tera Term介绍和使用指南

Tera Term 是一个用于 Windows 操作系统的免费终端模拟器和串口通信软件。它主要用于在计算机和其他设备之间建立串口通信连接,例如通过串行线缆连接到设备如路由器、开发板或嵌入式系统。Tera Term 支持多种通信协议和功能,包括 Telnet、SSH 和串口通信。提供了一个终端窗口,模拟了常见的终端类型,如VT100。支持通过串口与设备进行通信,可用于与嵌入式系统、微控制器等设备进行连接。提供 Telnet 和 SSH 功能,可用于通过网络连接到远程主机。

weixin_49423593的博客 1万+

java中常用设计模式

一.java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二.常用设计模式: 工厂...

qq_37976540的博客 369

VS2103+Intel2013+MSMPI运行Fortran并行程序

VS2103+Intel2013+MSMPI运行Fortran并行程序MSMPI安装新建Fortran90项目编写Fortran并行程序在cmd运行编译完成的执行文件 MSMPI安装 我这里采用的是Microsoft MPI v9.0.1,可以点此下载。下载完成后同时安装msmpisdk.msi、msmpisetup.exe两个文件,安装位置默认即可。 其中msmpisdk.msi的默认安装路径在C:\Program Files (x86)\Microsoft SDKs\MPI,该文件包含了mpi环境所需

weixin_43176703的博客 2937

java开发中将常用工具类统一使用工厂模式进行整理

文章目录前言一、定义一个注解二、创建属于自己的工厂模式 前言 日常开发中,经常需要使用很多比较常用的工具来。但是一个一个调用有时候看起来就会比较复杂,不易理解。推荐可以自己创建一个属于自己的工厂调用专属自己的工具。创建工厂模式的步骤如下。 一、定义一个注解 创建注解的目的是为了通过获取注解里的值,获取类的名称 代码如下(示例): import java.lang.annotation.ElementType; import java.lang.annotation.Retention; impor

xuxu96 790

从工艺文件到寄生分析:手把手教你用华大九天RCExplorer做版图预检(附ITF文件解析)

本文详细介绍了华大九天RCExplorer工具在模拟IC和版图设计中的应用,从工艺文件解析到寄生参数提取的全流程。通过ITF文件的深度解析和实战案例,帮助工程师掌握金属层、介质层及通孔参数的关键影响,提升设计效率与准确性。文章还提供了与StarRC工作流集成的实用技巧,是国产EDA工具应用的权威指南。

weixin_42522552的博客 405

Spring AI Alibaba Graph进阶:如何用图算法优化你的推荐系统?

本文深入探讨了如何利用Spring AI Alibaba Graph的图算法优化推荐系统。通过分析用户行为数据的网络化特征,结合加权随机游走和社区发现算法,显著提升推荐精准度和用户点击率。文章还分享了混合推荐架构设计、性能优化技巧及生产环境中的实战经验,为开发者提供了一套完整的图算法推荐解决方案。

weixin_33738555的博客 128

【Java】单例设计模式与工具类设计

什么是设计模式 设计模式(Design pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。 使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性,毫无疑问,设计模式于己于人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦的结构一样。 单例设计模式 单例设计模式是最常用,也是最简单的设计模式。 目的:保证某一个在整个应用中某一个类有且只有一个实例(一个类在堆内存中只存在一个对象),即所有指向该类型的实例的引用都指向同一块

pangpd的博客 1082

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图(附源码)

上一节我们讨论了纹理贴图的相关基础操作,但上一节的纹理贴图操作基本上都是规则图形,包括圆形和球形虽然复杂一点,但是它也是规则的。这一节课我们要讨论一下,怎么在不规则图形上纹理贴图,就比如文章下图的心形纹理贴图,以及纹理的平移、旋转、放大缩小功能。

zhooyu的博客 1308

【设计模式】工厂模式(Factory Pattern)

工厂模式

qq_27198345的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

工厂模式(Factory Pattern)

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决接口选择的问题。我们明确地计划不同条件下创建不同实例时。让其子类实现工厂接口,返回的也是一个抽象的产品。创建过程在其子类执行。您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。Hibernate 换数据库只需换方言和驱动就可以。

u013115157的博客 1369

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

工厂模式Factory Pattern

又称为Kit模式属于对象创建型模式工厂所需生产的具体产品是多个位于不同产品等级结构中属于不同类型的具体产品。

Resurgence03的博客 928

Factory Pattern(工厂模式)

个人关于工厂模式的学习、理解以及实际案例的应用

我与岁月的森林的博客 821

抽象工厂模式-Abstract Factory Pattern

抽象工厂模式-Abstract Factory Pattern

帕布里克沃德曼的博客 1万+

工厂模式——Factory Pattern

工厂模式就是实现了创建者与调用者的分离,详细又可以分为一下三类: 简单工厂模式【Simple Factory】工厂方法模式【Factory Method】抽象工厂模式【Abstract Method】

不会停下学习的脚步,重在思考。 317

Factory Pattern 工厂模式总结

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。 一、简单工厂模式<对象抽离接口> 简单工厂模式适...

qq_37254296的博客 200

Factory Pattern 工厂模式

很多时候我们只是期望获取对象实例即可,并不关心实例构造过程。这个时候就可以将通过工厂模式来解决这个问题,其同样也是一种创建型模式。将实例的具体构造过程进行封装以对外屏蔽,就像现实世界中我们只需从工厂直接拿取产品即可,而无需care产品在工厂里的具体制造过程。 设计模式 Simple Factory Pattern 简单工厂模式 假设有三种交通工具:Car小轿车、Broom扫帚、Plane飞机。客户订购了其中某一个交通工具,那么只需要在佳通工具工厂把交通工具造好了直接去取就好了,至

weixin_40955388的博客 430

简单工厂模式-Simple Factory Pattern

简单工厂模式是一种非常常用的设计模式,但是并不属于GoF中的23种设计模式。简单设计模式有很多种实现方式。本文我们就来讨论简单工厂模式的实现方式,以及如何借助Spring实现一个扩展性很好的简单工厂模式。创建对象但是不想客户端暴露对象实例化的逻辑通过通用接口引用新创建的对象more。

jaune162的专栏,最新动态请关注:https://jaune162.blog 1410

设计模式之工厂模式(Factory Pattern)

一、工厂模式(Factory Pattern)简介 工厂模式又叫工厂方法模式(Factory Method),也叫"虚拟构造器模式"或"多态工厂模式 "。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现"开闭原则",实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。它是一种创建型模式。 二、工厂模式(Factory Pattern)的优点 ①符合单一职责原则,每个具体工厂类只负责创建对应的产品 ②扩展性高,如果想增加一个产品,只要扩展一个工厂子类和具体产品

Victor_Li_的博客 2953
上一篇: 单例模式(Singleton Pattern)
下一篇: 【面试题】深复制与浅复制的区别
红枫忆梦
博客等级 码龄8年 117粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值