首页
学习
活动
专区
圈层
工具
发布

使用设计模式中的工厂模式,改善代码复用和扩展性

我是程序视点的小二哥,今天和大家一起简述下设计模式中的工厂模式。前言设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。...从上面的描述中,我们可以抽象出这么几个角色: 工厂类:负责创建需要的实例产品抽象类:工厂类能创建出来的所有产品类的抽象。它负责描述所有实例所共有的公共接口。...不愧简单工厂模式的名号。简单工厂模式存在的问题上面的例子中,我们是知道该工厂能创建华为手机和苹果手机。所有我们在测试的时候,也只创建了这两个实例。...但是由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。...当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;一句话:虽然简单工厂模式实现了对象的创建和对象的使用分离

57820

如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了

Java的二十几种设计模式背的滚瓜烂熟,为什么这个时候不想着尝试用一下?...二、策略模式的实现方式 策略模式是oop中最著名的设计模式之一,是对方法行为的抽象,可以归类为行为设计模式,也是oop中interface经典的应用。其特点简单又实用,是我最喜欢的模式之一。...>... targetTypes) { ClassScaner cs = new ClassScaner(); for (Class... targetTypes) { ClassScaner cs = new ClassScaner(); for (Class<?...优点 易于扩展,增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合开放封闭原则 避免使用多重条件选择语句,充分体现面向对象设计思想 策略类之间可以自由切换,由于策略类都实现同一个接口

5.6K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微软正式发布分布式大规模图数据处理引擎 Graph Engine 1.0 预览版

    由 Microsoft Research 开发的 Graph Engine 1.0 预览版正式发布。Graph Engine 是一个基于内存的分布式大规模图数据处理引擎。...从系统基础架构到编程模式,图数据的高效并行处理面临着全方位的挑战。基于高效的内存云架构和灵活通用的计算引擎,Graph Engine 能够帮助用户更方便地构建实时查询应用和高吞吐量离线分析平台。 ?...作为一个通用计算引擎,Graph Engine 拥有极强的可扩展性。通过一个简洁优雅的数据和消息传递建模语言,Graph Engine 允许用户自由地定义数据模式和计算模型。...关于该项目,在早先的 Microsoft Research 上的一篇文章中指出:“ Trinity(Graph Engine)可支持在线查询处理和大型图表线下分析。...对于后者,通过底层向外扩展的分布式架构实现并行性。”

    1.5K50

    被迫重构代码,这次我干掉了 if-else

    思来想去基于当前业务场景重构,还是用策略模式比较合适,它是oop中比较著名的设计模式之一,对方法行为的抽象。...>... targetTypes) { ClassScaner cs = new ClassScaner(); for (Class... targetTypes) { ClassScaner cs = new ClassScaner(); for (Class<?...AbstractHandler)beanFactory.getBean(map.get(type)); } } 6、调用入口 我这里是在接受到MQ消息时,处理多个订单来源业务,不同订单来源路由到不同的业务处理类中。...策略模式的优缺点 优点 易于扩展,增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合开放封闭原则 避免使用多重条件选择语句,充分体现面向对象设计思想 策略类之间可以自由切换,

    63530

    Langchain中改进RAG能力的3种常用的扩展查询方法

    有多种方法可以提高检索增强生成(RAG)的能力,其中一种方法称为查询扩展。...我们这里主要介绍在Langchain中常用的3种方法 查询扩展技术涉及对用户的原始查询进行细化,以生成更全面和信息丰富的搜索。使用扩展后的查询将从向量数据库中获取更多相关文档。...该方法将从用户查询中退后一步,以便更好地从问题中获得概述。LLM将根据用户查询生成更通用的问题。 下面是原始查询和后退查询的示例。...这些生成的查询将用于在矢量数据库中查找文档。 多步查询的目标是改进查询,使其与主题更加相关,从而从数据库中检索更多相关的文档。...总结 以上就是最常用的3种改进RAG能力扩展查询方法。当你在使用RAG时,并且没有得到正确或详细的答案,可以使用上述查询扩展方法来解决这些问题。希望所有这些技术可以用于你的下一个项目。

    1.3K10

    设计模式在Spring中的精妙应用:模板方法模式的固化流程与灵活扩展

    钩子方法(Hook):提供默认实现的可选扩展点,子类可选择是否覆盖 工厂方法结合:将某些步骤的创建延迟到工厂方法 Spring框架中的JdbcTemplate就是这种模式的绝佳实践。...模式优势分析 模板方法模式在框架设计中具有显著优势: 代码复用:将公共行为提升到父类,避免代码重复 扩展控制:通过限定扩展点,确保核心流程不被破坏 反向控制:框架控制流程,应用代码只需关注业务逻辑 减少错误...模板方法模式在Spring中的应用 在Spring框架的底层实现中,模板方法模式几乎无处不在。...模板方法模式的灵活扩展 在Spring框架的架构设计中,模板方法模式的灵活扩展能力堪称其最精妙的设计之一。...据统计,Spring Boot中超过60%的自动配置机制都是通过这些扩展点实现的。 性能与扩展性的黄金平衡 特别值得注意的是,Spring在应用模板方法模式时始终保持着对性能的敏锐把控。

    30800

    微软开源图数据查询语言LIKQ,海量图数据实时检索和集成触手可得

    同时,LIKQ 还具备灵活的可扩展性,用 Lambda 表达式表达的任意计算逻辑都可以被直接嵌入到查询语句中,从而实现强大的服务器端计算。...比如在数据查询中,开发者可以方便地嵌入通过 Lambda 表达式自定义的数据过滤条件来进行灵活的图模式匹配。...此前,基于 Graph Engine 的 LIKQ 已被应用于微软认知服务的学术图谱检索 API 中,用户可以通过微软认知服务对微软学术图谱进行实时的路径和模式匹配查询。 ?...作为一个高性能内存数据库,Graph Engine 可充分利用内存来加速数据访问和并行计算。作为一个通用计算引擎,Graph Engine 拥有极强的可扩展性。...Graph Engine官网:https://www.graphengine.io/ 更多信息:https://github.com/Microsoft/GraphEngine

    1.6K100

    基础扩展 | 11. 使用ADO和SQL在Excel工作表中执行查询操作

    学习Excel技术,关注微信公众号: excelperfect 我们可以将存储数据的工作表当作数据库,使用ADO技术,结合SQL查询语句,可以在工作表中获取满足指定条件的数据。...在VBE中,单击菜单“工具——引用”,在“引用”对话框中,找到并选取“Microsoft ActiveX Data Objects 6.1 Library”,如下图1所示。 ?...代码中,打开并连接数据库的语句为: conn.Open"Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" &ThisWorkbook.FullName...在同一代码中,只需要连接数据库一次,接着可以执行多个查询操作,无需每次查询前都进行连接。...SQL查询语句为: query = "Select * from [" & wksData.Name _ & "$] Where 物品='苹果' " 在工作表wksData中查询物品为“苹果”的记录

    6.7K20

    推荐一个企业级知识图谱增强的检索增强生成(RAG)的项目

    介绍 Microsoft GraphRAG 是一个开源项目,旨在利用 Microsoft Graph 的强大功能构建企业级的知识图谱增强的检索增强生成(RAG)方案。...RAG 引擎(RAG Engine): 接收来自检索器的结果,并将其与用户查询一起输入到大语言模型(LLM)中。 利用 LLM 来生成最终的答案或文本。...构建知识图谱: 运行知识图谱构建器,将数据转换为知识图谱,并将其存储到图数据库中。 配置检索器: 根据实际需求配置检索器,包括图查询语言的选择、检索策略的设置等。...一般来说,需要以下资源: Microsoft GraphRAG 具有以下优势: 企业级知识图谱: 利用 Microsoft Graph 构建企业级的知识图谱,提供丰富的上下文信息。...检索增强生成: 将知识图谱与 RAG 技术相结合,提升 LLM 在企业应用中的问答和生成效果。 模块化架构: 架构设计清晰且模块化,易于扩展和定制。

    1.5K10

    基于OAuth同意滥用的假冒微软应用钓鱼攻击研究

    此类攻击不依赖凭据窃取,而是滥用OAuth 2.0授权框架中的“用户同意”流程,使恶意应用获得长期有效的刷新令牌(refresh token),进而通过Microsoft Graph API静默读取邮件...本文系统分析该类攻击的技术路径、权限滥用模式与隐蔽性特征,指出传统基于登录异常或密码泄露的检测机制对此类“合法授权”行为存在显著盲区。...2 攻击技术原理与实施路径2.1 OAuth 2.0 用户同意机制回顾在Microsoft Entra ID中,第三方应用若需访问用户资源(如邮件、日历),必须通过OAuth 2.0授权码流程获取权限。...Graph 查询示例:GET https://graph.microsoft.com/v1.0/me/oauth2PermissionGrantsAuthorization: Bearer Graph API 异常行为监控部署KQL查询,检测异常API调用模式:// 检测单应用大量邮件读取AuditLogs| where OperationName == "Consent to application

    23710

    图数据库调研

    图检索语言 这里主要对比下面: Cypher:Neo4j 的查询语言称作 Cypher,Cypher 是对图形的声明查询语言,使用图形模式匹配作为主要的机制作 图形数据选择(包括只读和变更操作)。...Cypher 的声明模式匹配性质意味着可以通过描述想从它那里得到什么查询图形数据。...JanusGraph 的两个最明显的优势: 支持支持实时、数千用户并发遍历图和分析查询图的功能 架构是分布式的,可以自由的扩展集群节点的,可以利用很大的集群,JanusGraph 可以存储很大的包含数千亿个节点和边的图...应用程序和Janus Graph处在两个不同JVM中,应用通过给JanusGraph提交Gremlin查询给GremlinServer,来使用JanusGraph,因为JanusGraph原生是支持Gremlin...在OrientDB中,任何类型的数据都是可搜索的,用户域的建模支持面向对象的概念,可以很容易地扩展。每个模型不只是一个层,而是共存于一个引擎中。可选无模式、全模式或混合模式。

    8.4K30

    微软开源了一个 助力开发LLM 加持的应用的 工具包 semantic-kernel

    这使您能够在应用中构建新体验,从而为用户带来无与伦比的工作效率:例如总结冗长的聊天交流,标记通过Microsoft Graph添加到待办事项列表中的重要“下一步”,或者计划一个完整的假期,而不仅仅是预订飞机上的座位...使用SK快速启动和运行,SK是Microsoft AI生态系统的最新成员,使开发人员能够轻松地将LLM AI功能集成到他们的应用程序中。...图书创作者[12]:使用规划师解构复杂的目标,并在应用中设想使用规划师。 身份验证和 API[13]:使用基本连接器模式进行身份验证并连接到 API,并设想将外部数据集成到应用的 LLM AI 中。...Github仓库问答[14]:使用嵌入和内存来存储最近的数据,并允许您对其进行查询。...但是,仓库中的某些示例需要 .NET 7[19] 和 VS Code Polyglot 扩展[20]才能运行笔记本 SK 入门 下面是如何从 C# 控制台应用使用语义内核的快速示例,这里我们使用VS Code

    1.7K20

    基于微软 Entra B2B 邀请机制的 TOAD 钓鱼攻击分析与防御策略

    邀请可通过以下方式发起:手动邀请:管理员或具有“Guest Inviter”角色的用户通过 Azure 门户、Microsoft Graph API 或 PowerShell 发送邀请。...一旦获得权限,攻击者可通过 Microsoft Graph API 发送邀请。...Single User条件:同一用户在 1 小时内发送超过 5 次邀请响应:自动禁用该用户邀请权限并告警Graph API 查询示例:GET https://graph.microsoft.com/v1.0...官网查询;模拟演练:发送测试性 TOAD 邮件,评估员工响应行为。...此外,通过 Graph API 监控,我们能在 5 分钟内检测到异常邀请模式并自动响应。6 讨论本攻击揭示了现代 IAM 系统的一个根本矛盾:便利性与安全性之间的张力。

    16500

    开源图数据库neo4j极简教程

    数据压缩率高 功能相对受限 HBase 文档型数据库 键值对扩展 数据结构要求不严格;表结构可变;不需要预先定义表结构 查询性能不高,缺乏统一的查询语法 MongoDB 图数据库 节点和关系组成的图 利用图结构相关算法...图模式的高效率使其成为出色的解决方案,能够更好更快地进行实时大数据分析查询。...在此类系统中,每次查询都会涉及大部分的数据文件,关系型数据 库则更加糟糕,处理全量数据很慢,并且需要给表建立连接才能呈现表间的关系。...在基于模式的图数据库中,用户定义点类型和边类型,就像对象类一 样。此外,将点关联至其他点的边有点类似于对象方法,因为边说明点可以“做”什么。...但图数据库一直以 来有一项劣势,那就是可扩展性不佳 :以往的图数据库无法加载或存储超大数据集、无法实时处理查询,并且 / 或 者无法遍历查询中两个以上的连续关联(两步以上)。

    4.4K21

    【向量检索研究系列】产品介绍

    测试结果中可以看出Google的ScaNN索引和基于HNSW的索引性能较优。...高可用、高可靠:Milvus 支持在云上扩展,其容灾能力能够保证服务高可用。混合查询:Milvus 支持在向量相似度检索过程中进行标量字段过滤,实现混合查询。...打分:计算查询向量与整个数据集或分区内数据的距离,这个距离不需要很精确。重新打分(可选步骤):从打分阶段获取TopK的向量,然后更加精确地计算与查询向量的距离,从计算后的向量中获取TopK向量列表。...2.5 SPTAGSPATG (Space Partition Tree And Graph) 是由Microsoft Research (MSR) and Microsoft Bing共同发布的空间分区树和图索引...Github地址:https://github.com/microsoft/SPTAG优点支持服务化和集群化部署。支持CPU和GPU模式。支持实时更新。缺点不支持过滤功能。不支持内积距离。

    4.3K62
    领券