设计模式之简单工厂模式

news/2024/10/16 2:25:25

 

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

1. Factory:工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。

2. Product:抽象产品角色,它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法。抽象产品的引入 将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因此所有创建的具体产品对象都是其子类对象。

3. ConcreteProduct:具体产品角色,它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的摸个具体类的实例。每个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中生命的抽象方法。

 

典型的工厂类代码如下:根据所传入的参数不同可以创建不同的产品对象。

 在客户端代码中,通过调用工厂类的工厂方法即可得到产品对象,典型的代码如下:

 总结:简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开。

 

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

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

相关文章

IDEA更换背景图片

DEA如何更换背景图片 在IDEA编辑器中点击【Help】–》【Find Action…】快捷键为【CTRL+SHILF+A】。在打开的窗口内搜索【Set Background Image】并点击找到的选项。 选择浏览一张要更改成背景的图片,这里可以对背景的透明度,样式进行修改。修改完后点击【OK】按钮。 本文来…

【python教程】打包和发布自己的项目,让别人去pip

@目录1.环境搭建1.1 换源1.2 安装wheel1.3 安装twine1.4 注册PyPI账号2.编写setup.py2.1 项目文件树2.2 编写setup.py文件3.构建4.上传ERROR:The user XXX isnt allowed to upload to project 2024.1.19更新:1.环境搭建 1.1 换源在pip安装时使用-i参数,可以指定源。以下有许…

Go 互斥锁 Mutex 源码分析(二)

原创文章,欢迎转载,转载请注明出处,谢谢。0. 前言 在 Go 互斥锁 Mutex 源码分析(一) 一文中分析了互斥锁的结构和基本的抢占互斥锁的场景。在学习锁的过程中,看的不少文章是基于锁的状态解释的,个人经验来看,从锁的状态出发容易陷入细节,了解锁的状态转换过一段时间就忘…

将洛谷私信接入Windows

首先下载一个私信Github:https://github.com/GCSG01/LG_Show_Massger/archive/refs/heads/main.zip 然后解压,找到 src/settings.json,把你的洛谷 cookie 和 UID 填进去,点击 Start.cmd 运行。(其余的不要改) 之后不出意外就会有两个窗口:AI 功能: 下载仓库:https://git…

REST framework:分页

REST framework提供了分页的支持 一、全局配置(不建议使用) 在配置文件中设置全局的分页方式:REST_FRAMEWORK = {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 10 # 每页数据量 }二、局部配置 在不同的视图中可以通过pagination_c…

052、Vue3+TypeScript基础,页面通讯之一个组件中多个v-model数据绑定

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue// 引入emitter用于全局事件总线 // import emitter from @/utils/emitterconst app = createApp(App);// App.vue的根元素id为app app.mou…

React 和 Vite 环境下 TailwindCSS 的配置指南

1. 安装tailwindcss npm install -D tailwindcss postcss autoprefixer2. 生成tailwindcss 配置文件 npx tailwind init -p3. tailwind.config.js 配置 /** @type {import(tailwindcss).Config} */ export default {content: ["./index.html","./src/**/*.{js,t…

051、Vue3+TypeScript基础,页面通讯之v-model在组件中手写实现

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue// 引入emitter用于全局事件总线 // import emitter from @/utils/emitterconst app = createApp(App);// App.vue的根元素id为app app.mou…