1_工程设计模式-简单工厂设计

news2024/11/16 5:42:02

工程设计模式

一.简单工程设计模式

1.概念

简单工厂模式( Simple Factory Pattern )是指由一个工厂对象决定创建出哪一种产品类的实例

但它不属于 GOF 23 种设计模式。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。

2.代码实例【课程录制功能工厂案例】

创建一个抽象类

public interface ICourse {
    /** 录制视频 */
    void record();
}

创建抽象实现类

//java课程录制功能
public class JavaCourse implements ICourse {
    public void record() {
        System.out.println("录制Java课程");
    }
}
//Python课程录制功能
public class PythonCourse implements ICourse {
    public void record() {
        System.out.println("录制Python课程");
    }
}

创建简单工厂类来,创建对应的对象[这个对象都是抽象类的实现]

public class CourseFactory {
    //1.通过标识字符串来创建不同实例实例对象
    public ICourse create(String name){
        if("java".equals(name)){
            return new JavaCourse();
        }else if("python".equals(name)){
            return new PythonCourse();
        }else {
            return null;
        }
    }
    //2.根据类全路径来创建不同的实例对象
    public ICourse create(String className){
        try {
            if (!(null == className || "".equals(className))) {
                return (ICourse) Class.forName(className).newInstance();
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    //3.通过反射来创建不同的实例对象-->推荐使用更简洁
    public ICourse create(Class<? extends ICourse> clazz){
        try {
            if (null != clazz) {
                return clazz.newInstance();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}

调用简单的工厂类创建不同的实例对象

public class SimpleFactoryTest {
    public static void main(String[] args) {
        //使用类全路径来创建不同的实例对象
        ICourseFactory factory = new ICourseFactory();
        ICourse course = factory.create("com.gupaoedu.vip.pattern.factory.JavaCourse");
        course.record();
        
        //通过反射来创建不同的实例对象-->推荐使用更简洁而且不容易错
        CourseFactory factory = new CourseFactory();
        ICourse course = factory.create(JavaCourse.class);
        course.record();
    }
}
3.上面简单工厂类类图
类全路径来创建不同的实例对象类图:

在这里插入图片描述

反射来创建不同的实例对象类图:

在这里插入图片描述

4.简单工厂类总结:

简单工厂概念:

  • 简单工厂创建较少的对象,根据传入的参数获取不同的实例对象。不需要关注创建实例对象逻辑处理过程。

    简单工厂创建步骤:

  • 创建抽类并实现抽象类

  • 根据抽象类,创建对于的简单工厂类[根据字符串标识创建对应的实例对象[易错];根据类路径创建对应实例对象[易错];通过反射创建实例对象;]

  • 调用工厂类创建不同实例对象

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

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

相关文章

Java SE面试

1.什么是 Java&#xff1f; Java 是一门面向对象的编程语言&#xff0c;不仅吸收了 C语言的各种优点&#xff0c;还摒弃了 C里难以理解的多继承、指针等概念&#xff0c;因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的优秀代表&#xff…

微信小程序 引导地址授权 获取位置信息 uniapp

概述 获取位置信息&#xff0c;需要保证是否授权位置信息&#xff0c;有几个条件是导致无法授权的原因 &#xff08;1&#xff09;微信应用未授权定位设置 &#xff08;2&#xff09;首次进入小程序未授权位置信息 &#xff08;3&#xff09;小程序之前阻止过授权位置信息 &…

深入理解堆(Heap):一个强大的数据结构

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 前言堆的实现基本操作结构体定义初始化堆&#xff08;HeapInit&#xff09;销毁堆&#xff08;HeapDestroy&#xff09; 重要函数交换函数&#xff08;…

Mybatis简易搭建并查询数据库表内所有数据

搭建步骤 1.在mysql中创建user表&#xff0c;添加数据2.创建maven模块&#xff0c;导入坐标3.在资源文件夹中导入需要用到的logback.xml4.编写MyBatis 核心配置文件->替换连接信息 解决硬编码问题5.编写 SQL映射文件->统一管理sgl语句&#xff0c;解决硬编码问题6.编码定…

Mybatis实现增删改查的两种方式-配置文件/注解

环境准备 1.数据库表tb_brand -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand(-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20),-- 排序字段ordered int…

阿里巴巴微服务治理框架的终极PK!

另外我的新书RocketMQ消息中间件实战派上下册&#xff0c;在京东已经上架啦&#xff0c;目前都是5折&#xff0c;非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

前端效果 登入界面

文章目录 效果展示&#xff1a; 代码&#xff1a; <template><div class"login"><div class"section-1"><div class"card" mouseover"activeCard 1" mouseleave"activeCard 0" click"islogin…

【SpringBoot+dubbo+zk】实现服务之间rpc通信

0)前置准备&#xff0c;我们使用zk作为注册中心&#xff0c;先启动zk&#xff0c;也就是2181端口。 1)父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http…

UWB灵犀遥控器方案介绍

关键字&#xff1a;UWB技术、遥控器三维定位、遥控器指向操控 系统介绍&#xff1a;UWB灵犀遥控器&#xff0c;基于UWB TOF测距和AOA测角原理。显示器端可以同时定位遥控器的位置和朝向。实现使用遥控器指向屏幕&#xff0c;即可隔空触控&#xff0c;在大屏上实现滑动、拖拽、点…

编译原理第二次小班课

写给入门者的LLVM介绍 - 知乎 (zhihu.com) 代码优化与LLVM IR pass | Kiprey’s Blog A Tour to LLVM IR&#xff08;上&#xff09; - 知乎 (zhihu.com) 第5章 LLVM中间表示 — Getting Started with LLVM Core Libraries 文档 (getting-started-with-llvm-core-libraries-zh-…

Python从入门到网络爬虫(异常处理详解)

前言 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响了程序的正常执行。一般情况下&#xff0c;在python无法正常处理程序时就会发生一个异常。异常是python对象&#xff0c;表示一个错误。当python脚本发生异常时我们需要捕获处理它&#xff0c;…

【leetcode】力扣热门之反转链表【简单难度】

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 用例 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 输入&#xff1a;head [] 输出&#xff1a;[…

软件测试|深入理解SQL FULL JOIN:语法、用法及示例解析

简介 在SQL中&#xff0c;JOIN是一个强大的操作&#xff0c;它允许将两个或多个表中的数据进行关联。SQL提供了多种JOIN类型&#xff0c;其中之一是FULL JOIN。FULL JOIN允许从左表和右表中选择所有记录&#xff0c;并将它们组合在一起。本文将深入探讨SQL FULL JOIN的语法、用…

ASP.NET Core基础之图片文件(二)-WebApi图片文件上传到文件夹

阅读本文你的收获&#xff1a; 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中&#xff0c;学习了如何获取WebApi中的静态图片&#xff0c;本文继续分享如何上传图片。 那么…

单点测距传感器|激光扫描传感器SPR系列安装方法

单点测距传感器|激光扫描传感器可用于对物体进行非接触式距离测量&#xff0c;其十分广泛的应用于工业自动化、生产线、传送带等工业自动化场景中&#xff0c;也可以使用测距传感器进行物体的距离测量和位置检测、AGV和又车的碰撞保护&#xff0c;机器人工作范围的量程检测&…

C++实现单例模式

单例模式&#xff1a; 一种设计模式&#xff0c;它的目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。它适用于需要全局唯一的对象或资源的情况。 23种设计模式种最简单最常见的一种&#xff08;高频考点&#xff09; 要求&#xff1a;通过一个…

移动通信原理与关键技术学习(3)

1.什么是相干解调&#xff1f;什么是非相干解调&#xff1f;各自的优缺点是什么&#xff1f; 相干解调需要在接收端有一个与发送端一样的载波&#xff08;同样的频率和相位&#xff09;&#xff0c;在接收端的载波与发送端载波进行互相关操作&#xff0c;去除载波的影响。相干…

ssm使用web工程的相关知识

不使用框架创建web的两种方式&#xff08;这里是idea2022.3.2版&#xff09; 第一种&#xff1a;项目右键点击&#xff1a;add Framwork support选择框架进行创建。 操作步骤&#xff1a; 使用这种方式创建可能会存在的问题&#xff1a; 如果你创建web框架前&#xff1a;在…

【Flutter 开发实战】Dart 基础篇:常见的数据类型

Dart 支持许多数据类型&#xff0c;包括我们常见的 Numbers&#xff08;数值类型&#xff09;、Strings&#xff08;字符串类型&#xff09;、Booleans&#xff08;布尔类型&#xff09;&#xff0c;也支持一些包括 Collections&#xff08;集合类型&#xff09;、Records&…

嵌入式项目——平衡小车(1)

焊接 驱动板需要焊接的如上图。 陀螺仪8pin排母电机两路排线插口。(个别同学需要焊接)两个电池仓,注意电池仓分正反。 安装 底部电池板 4个 双通尼龙柱M3*224个 尼龙螺钉M3*6电机驱动板