秋招突击——设计模式补充——简单工厂模式和策略模式

news/2024/7/8 7:46:23 标签: 设计模式

文章目录

    • 引言
    • 正文
      • 简单工厂模式
      • 策略模式
        • 策略模式和工厂模式的结合
        • 策略模式解析
    • 总结

引言

  • 一个一个来吧,面试腾讯的时候,问了我单例模式相关的东西,自己这方面的东西,还没有看过。这里需要需要补充一下。
  • 但是设计模式有很多,今天就来了解简单工厂模式、策略模式以及单例模式的。
  • 道阻且长,一步一步来吧。
  • 这里所有的材料和截图都是来自于《大话设计模式

正文

简单工厂模式

  • 对于程序开发中,容易改变的地方,应该考虑使用一个单独的类来做这个创建实例的过程,这就是工厂。
    *
  • 使用一个factory作为工厂类,其中的成员代表它能够生产的产品的类别,然后具体的产生的样本是这个产品类别对应的具体的不同的实例对象。
    • 加减乘除等几个操作符号都是operation操作符号的子类,通过父类接口可以进行调用。

为什么叫做工厂

  • 个人理解,你给我一个加工指标,我给你一个对应的符合你指标的对象,然后统一用这些子类加工指标的父类进行处理。

策略模式

  • 定义了算法家族,分别封装起来,让他们之间可以互相替换
  • 该模式让算法的变化,不会影响到使用算法的客户。

具体结构图如下

在这里插入图片描述

  • 具体的所有的策略都是继承Strategy,然后具体实现对应的抽象方法,通过strategy接口来调用不同子类对象,实现多态
  • context会以父类成员实例对象作为成员函数,对应的构造函数中需要传入对应的strategy对象,然后在调用对应的接口。

具体调用图如下

在这里插入图片描述
在这里插入图片描述

  • 需要的在context中传入具体已经创建好的对象,也就是说对象是在接口界面创建的。
策略模式和工厂模式的结合
  • 将具体的工厂对象工厂的算法子类进行替换,context中返回的是结果,接受的是需要处理的不同对象,然后是通过单例模式调用的
    • 将对象的创建和接口信息统一转移到context文件中,

在这里插入图片描述

  • 简单工厂模式,让客户知道CashSuper以及对应的具体的现金工厂对象,相当于同时知道两个类。
  • 但是将策略模式和工厂模式融合之后,客户端只需要的知道cashcontext这一个策略上下文对象,进一步实现解耦。
策略模式解析
  • 针对完成功能相同==》输入和输出是相同,但是具体的实现逻辑和细节是不同的,所以需要以相同的方式调用所有的算法,减少各类算法和实用类之间的耦合度

优点

  • 策略模式的Strategy类层次为 Context定义了一系列可供重用的算法,继承有助于析取这些算法中的公共功能的

    • 不同的打折策略公共的功能,就接受金额,并返回金额。
  • 简化了单元测试,每一个算法都有自己的类,可以通过自己的接口单独测试

总结

  • 策略模式是用来封装算法的,不仅仅用来封装算法,可以封装几乎任何类型的规则
    • 只要在分析过程中,听到的需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化
  • 基本策略模式中,选择所用具体实现的职责给客户端对象承担,然后再将实例化之后的对象,转给策略模式的context对象

总结

  • 今天太晚了,太累了,上午面试的东西,下午花了很多时间去整理,然后有准备了一下奖学金的申领的内容。已经到深夜了。又没有刷算法,又没有完全看完,不过太累了。
  • 明天早点起,加油吧!

http://www.niftyadmin.cn/n/5536809.html

相关文章

【机器学习】连续字段的特征变换

介绍 除了离散变量的重编码外,有的时候我们也需要对连续变量进行转化,以提升模型表现或模型训练效率。在之前的内容中我们曾介绍了关于连续变量标准化和归一化的相关内容,对连续变量而言,标准化可以消除量纲影响并且加快梯度下降…

论文浅尝 | 从最少到最多的提示可在大型语言模型中实现复杂的推理

笔记整理:王泽元,浙江大学博士 链接:https://openreview.net/forum?idWZH7099tgfM 1. 动机 尽管深度学习已经取得了巨大的成功,但它与人类智慧仍然存在一些明显差距。这些差距包括以下几个方面:1)学习新任…

回溯法:生成一个字符串的所有排列组合

问题:字符串abcd怎样获取abcd、acbd、acdb、adbc、adcb、bacd、bcad、bdac、bdca、cabd、cdba、cadb、cbda等,所有排列。 使用回溯法来生成一个字符串的所有排列 import java.util.ArrayList; import java.util.List;public class Permutations {publi…

.net 8 集成 MinIO文件存储服务,实现bucket管理,以及文件对象的基本操作

一、准备工作 1、本地部署MinIO服务 2、创建MinIO的Access Key 3、创建.net 项目 4、下载MinIO sdk 5、相关文档 二、编写MinIO工具类 三、管理存储桶 1、MyBucket类 (1)判断bucket是否存在 (2)新建bucket &#xff08…

Nature Communications|用于电子皮肤的自主自愈晶体管(柔性半导体器件/电子皮肤/柔性电子)

2024年4月23日,韩国庆熙大学Jin Young Oh,美国斯坦福大学鲍哲南(Zhenan Bao)和韩国嘉泉大学Tae Il Lee团队,在《Nature Communications》上发布了一篇题为“Autonomous self-healing supramolecular polymer transistors for skin electronics”的论文。论文内容如下: 一…

从OpenAI停服看中国市场:国产替代崛起的机遇与挑战

一、OpenAI 停服事件背景 OpenAI 自 2020 年推出 GPT-3 以来,在全球范围内引起了极大的反响。其强大的自然语言处理能力使其成为许多企业和开发者的首选工具。然而,2024 年 6 月 25 日,许多中国用户收到了一封来自 OpenAI 的邮件&#xff0c…

DFS之搜索顺序——AcWing 1116. 马走日

DFS之搜索顺序 定义 DFS之搜索顺序是指在执行深度优先搜索时,遍历图或树中节点的策略。具体而言,DFS会沿着一条路径深入到底,当无法继续深入时回溯,然后选择另一条未探索的路径继续深入。搜索顺序直接影响到搜索效率和剪枝的可能…

多态的优点

多态的优点 1、多态的优点1.1 可替换性(Substitutability)2、可扩充性(Extensibility) 2、总结 💖The Begin💖点点关注,收藏不迷路💖 1、多态的优点 在面向对象编程(OOP…