设计模式 -- 工厂方法模式以及抽象工厂模式

news2024/12/23 10:53:27

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是工厂方法模式?

        工厂方法模式是一种常用的类创建型设计模式,次模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦,复用和方便后期维护拓展的目的

二、工厂方法模式的优缺点

优点:

  1. 可以将对象的创建和使用分离,降低系统的耦合度。
  2. 可以更方便地扩展和修改系统,增加新的产品类时只需要添加一个具体工厂类即可。
  3. 可以为系统提供一个统一的接口,使得客户端不需要关心具体的产品类。

缺点

  1. 增加了代码的复杂性,需要创建多个工厂类来实现不同的产品创建逻辑。

  2. 工厂方法模式会增加系统中类的数量,增加了系统的复杂性。

  3. 工厂方法模式的性能可能会受到影响,因为每次创建对象都需要调用工厂方法。

  4. 工厂方法模式可能会导致代码的重复,因为多个工厂类可能会有相似的实现逻辑。

  5. 工厂方法模式需要开发人员对系统中的类和接口有深入的了解,否则可能会出现设计错误。

三、工厂方法模式的结构:

        抽象工厂角色:是工厂方法的核心

        具体工厂角色:实现抽象工厂接口的具体工厂类

        抽象产品角色:工厂方法模式所创建的对象的超类型

        具体产品角色:实现抽象产品角色所定义的接口

四、工厂方法模式实战

现在以创建车的工厂来实战:

1.创建抽象产品类

 2.创建抽闲工厂类

3.创建具体产品类

 

4.创建具体工厂类 

 

 这里只是简单写一个demo,具体使用需要根据实际情况去创建,这里就可以用到单例模式或者多例模式,甚至其他一些,具体情况具体分析.

5.测试使用

6.结果

 

五.总结

        工厂方法模式的应用也十分广泛,包括java的spring框架中的BeanFactory就是一个工厂方法的实现,因此我们在学习的过程中不仅要知道原理,还要思考原理如何应用到实际中.

六.工厂方法模式与抽象工厂模式有什么不同

        从本质上来开,工厂方法模式是抽象工厂模式的一个具象,工厂方法模式针对的是一个具体的产品类,而抽象工厂模式则是针对于一组相关的产品类,因此小编就不在赘述抽象工厂模式,因为二者没有本质的区别.uml图都可以套用.

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

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

相关文章

Mysql MVCC实现

文章目录 背景MVCC定义快照读和当前读当前读快照读 MVCC实现原理隐式字段undo log版本链1.插入一条记录2.修改记录3.修改记录 Read View读视图属性:Read View可见性算法 隔离级别长事务为什么要避免长事务 背景 并发事务可能产生的问题: 读读&#xff…

zk111111111111111111

Zookeeper 1 zookeeper(作为 dubbo 的注册中心): 概述: zookeper 是 一个分布式的、开源的分布式应用程序的协调服务,管理分布式应 用 作用: 配置管理,分布式锁,集群管理 2 zookeeper 的安装 (dubbo 的资料中已经整理) 3 zookeeper 的数据模型 zookeeper 是一个树形的服…

微信小程序php+vue 校园租房指南房屋租赁系统

本着诚信的原则,平台必须要掌握出租方必要的真实可信的信息,这样就可以防止欺诈事件的发生,事后也可以联系找到出租方。并且租金等各方面规范标准化,在这易租房诚信可信的平台让承租方与出租方充分有效对接,既方便了承…

扫清盲点:带你学习 树状数组 这种数据结构

什么是树状数组 树状数组是一种用于维护数列前缀和的数据结构,它可以在 O(logn) 的时间复杂度内修改单个元素的值,以及查询某个区间的元素和。 树状数组的特点是什么? 树状数组的特点其实就是,在单点修改 ,和区间查询…

rancher2.7丢失集群信息

使用Docker 单节点安装rancher,然后在rancher中创建了一个k8s的集群。重启rancher所在的虚拟机后,登录rancher发现这是新的实例,集群信息丢失了。但是k8s集群还是好好的。 检查k8s的日志,api server日志会报错 time"2023-0…

11 - 多平台适配

多平台适配 11-1:开篇 在上一章中,我们知道了,当【慕课热搜】运行到 h5 端的时候,那么会出现一些问题,这些问题具体有: hot 列表滚动,tabs 置顶效果消失在火狐浏览器中,横线出现非…

kafka-kafka集群配置、kafka集群启动创建kafka主题、获取主题数据

本文章使用三台主机,分别为:master、slave1、slave2 一、解压kafka安装包至目录下 tar -zxvf kafka_2.12-2.4.1.tgz -C /需要放置的路径/ 二、修改配置文件 server.properties 该配置在kafka目录的config目录下 #修改文件中id数值 broker.id0 kafka集群…

Linux -- Web服务器-Apache 快速安装及主配置文件分析

目录 快速安装 Apache : 预处理 : 关闭安全上下文检测 : 关闭防火墙 : 启动 Apache 服务 ( 启动 httpd ): 测试 : 主配置文件分析 : 常见配置文件所在位置 : 目录文件结构 :…

购物车--订单模块,练习完成

目标: 在购物车页面,增加一个创建订单的超链接。通过创建订单,在Order表里新增一条数据,同时把session中的订单条目都保存到数据库中。 1、创建两个表,orders用来具体存储每一个订单的细节,order_用来存储…

基于MobileNetV2的Transfer Learning模型,实现物体检测(附源码)

文章目录 一、MobileNet1. 深度可分离卷积(Depthwise separable convolution)2. MobileNet V13. MobileNet V2 二、物体检测源码(基于MobileNetV2) 一、MobileNet 1. 深度可分离卷积(Depthwise separable convolution…

智慧园区综合管理平台开发基本功能有哪些?

随着智慧城市建设与信息化发展,园区管理也需要更加智能便捷化,于是智慧园区管理系统开发应运而生。智慧园区综合管理系统就是利用物联网、大数据等技术工具,顺应产业园区升级发展需求,实现园区环境、设备、安全、基础管理、资源服…

【Linux】进程间通信——命名管道

文章目录 命名管道1. 见一见管道文件mkfifo函数管道文件的使用 2. 命名管道原理如何保证两个毫不相关的进程,看到的是同一个文件,并打开? 3. 用命名管道实现server&client通信如何使用makefile连续生成可执行程序comm.hpp文件server.cc 服…

如何通过 Baklib 平台实现知识共享(内含案例介绍)

在这个信息时代,知识被认为是最重要的资源之一。企业要想保持发展,就必须善于利用和管理知识。而知识管理则是一种涵盖人、过程和技术的活动,它通过收集、整理、传递和应用知识,使组织获得更高的效率、创造力和竞争力。本文将以知…

【Linux】八、Linux进程信号详解(一)

目录 一、认识信号 1.1 生活中的信号 1.2 将1.1的概念迁移到进程 1.3 信号概念 1.4 查看系统定义信号列表 1.5 man 7 signal 1.6 解释1.2的代码样例 1.7 信号处理常见方式概览 二、产生信号 2.1 signal函数 2.2 通过终端按键产生信号 2.3 调用系统函数向进程发信号…

前后端的身份认证【Node.js】

1. 前后端的身份认证 1.1 Web 开发模式 目前主流的 Web 开发模式有两种,分别是: (1)基于服务端渲染的传统 Web 开发模式 (2)基于前后端分离的新型 Web 开发模式 服务端渲染的传统 Web 开发模式 服务端渲染…

力扣面试题 08.06. 汉诺塔问题:思路分析+图文详解+代码实现

文章目录 第一部分:问题描述1.1 题目1.2 示例🍀 示例一🍀 示例二 1.3 提示 第二部分:思路分析第三部分:代码实现 第一部分:问题描述 1.1 题目 🏠 链接:面试题 08.06. 汉诺塔问题 -…

windows安装rabbitmq和环境erlang(最详细版,包括对应关系)

写在最前:不知何时起安装一个mq需要翻无数文章才能安上了,没有一个讲全的,这里写一个详细的教程。 删除旧版本对应关系: 1.在官方文档中找到RabbitMQ版本对应的Erlang版本重新下载安装包文档RabbitMQ Erlang Version Requirements — Rabbit…

大家副业都在做什么?csgo搬砖靠谱的副业推荐给你

从来没想过,以前只会玩CSGO的男孩子,现在居然能借助游戏赚到钱了!甚至不需要什么专业的技巧,简简单单 在steam平台选择有利润的道具后,再上架到国内网易BUFF平台,赚取“信息差”差价而已! 谁大…

itop-3568开发板驱动学习笔记(19)内核工作队列

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 工作队列简介共享工作队列工作结构体初始化 work_struct调度工作队列函数共享工作队列实验 自定义工作队列创建工作队列函数调度和取消调度工作队列刷新工作队列函数删除工作队列函数 内核延时工作队列延时…

成功上岸字节35K,技术4面+HR面,耗时20天,真是不容易

这次字节的面试,给我的感触很深,意识到基础的重要性。一共经历了五轮面试:技术4面+HR面。 下面看正文 本人自动专业毕业,压抑了五个多月,终于鼓起勇气,去字节面试,下面是我的面试过…