论软件设计模式及其应用

摘要

        2021年4月,本人有幸参与了某保险公司的“优车险”项目的建设开发工作,该系统以车险报价、车险购买、报案理赔为核心功能,同时实现了年检代办、道路救援、一键挪车等增值服务功能。在本项目中,本人有幸担任架构师一职,负责系统需求分析和架构设计工作。

        本文以软件设计模式及其应用为论述主题,首先介绍了软件设计模式的分类,包括创建型、结构型和行为型,分别阐述了各类模式的特点及所包含的具体模式,例如,创建型设计模式中包含了大家耳熟能详的单例设计模式。然后结合笔者实践经历,重点以生成器模式(创建型)、代理模式(结构型)、策略模式(行为型)为例,详细介绍了它们在本项目中的应用过程以及所取得的效果。项目历时6个多月的开发与迭代,成功上线,至今一直平稳运行。

正文

        2018年前后新能源汽车市场在国内快速扩张,这一现象导致燃油车的价格大幅度下降,在电车“出新”和燃油车“减价”的双重刺激下,国内汽车销售量出现了大幅度的增长。按照买车必购险的政策,车险的投保量随之快速增长,这为车险行业带来了前所未有的发展机遇。在上述行业背景下,我所在的保险公司为了提升自身车险交易平台的服务质量,于2021年4月,提出了"优车险"的项目计划,该系统主要实现了车险报价、车险购买、报案理赔三个核心功能,本质上是一个车险电商平台。为了给客户带来更好的服务体验进而增加客户粘性,该系统还提供了诸如年检代办、道路救援、一键挪车、电车充电等一系列增值服务功能。我有幸以架构师的身份参与并主导了本系统的开发建设工作,负责系统的需求分析和架构设计。项目初期,我们对系统的性能、可扩展性、成本等方面进行了全面评估,考虑到车险业务流程的复杂性和业务规则的多变性,以及系统对可维护性和扩展性的高要求,我们引入了软件设计模式,通过合理运用设计模式来优化系统架构,确保系统能够灵活适应市场变化和客户需求。

        为了更好地将软件设计模式应用到系统建设中,在启动系统设计工作前,我们针对软件设计模式的分类情况与特点展开了充分调研,重点剖析了每种设计模式类型的核心设计思想以及优势,并将关键理论要点进行了整理。

        1、创建型模式。创建型模式主要用于对象的创建,将对象的创建和使用分离,提高代码的灵活性和可维护性。其特点是隐藏了对象创建的具体细节,通过抽象创建过程,提供了一种创建对象的统一接口,这有助于降低代码的耦合度,提高代码的可复用性和可扩展性。常见的创建型模式包括单例模式、工厂模式、抽象工厂模式、生成器模式和原型模式。

        2、结构型模式。结构型模式主要用于处理类或对象的组合,通过组合不同的类或对象来实现更复杂的结构。其特点是通过对类和对象的组合,增强了系统的结构灵活性和可扩展性。常见的结构型模式包括代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式。

        3、行为型模式。行为型模式主要用于处理对象之间的交互和职责分配,通过定义对象之间的交互方式来实现系统的行为。其特点是注重对象之间的行为和职责分配,提高了系统的可维护性和可扩展性。常见的行为型模式包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。

        上述所整理的关于软件设计模式的分类和特点,在理论层面上为车险系统的建设提供了有力的参考。而在实际项目开发中,如何将理论应用于实际项目成为关键衔接环节。为此,我们对车险系统的业务需求和功能场景进行了深入分析,发现各类复杂的业务需求恰为软件设计模式提供了广阔的实践舞台。下文将结合具体的业务场景,重点以生成器模式、代理模式、策略模式为例,详细介绍了它们在本项目中的应用过程以及所取得的效果。

        一、生成器(Builder)模式在保单创建中的应用

        在车险系统的保单生成模块,保单实体包含丰富且复杂的信息,如投保人基本信息(姓名、联系方式、身份证号等)、车辆信息(车型、车架号、发动机号等)、保险条款明细(不同险种的保额、费率、免赔额等)、投保期限以及特别约定等内容。为了更高效、有序地创建保单对象,我们引入了生成器模式。在实现过程中,首先定义了一个抽象的保单生成器类,其中声明了构建保单各个部分的抽象方法,如构建投保人信息方法、构建车辆信息方法、构建保险条款方法等。然后创建具体的保单生成器实现类,如标准保单生成器、定制化保单生成器等,每个实现类根据不同的业务需求和规则,具体实现这些构建方法。同时,设立一个指导类(Director),负责协调保单生成器按照特定顺序构建保单。例如,指导类先调用保单生成器的构建投保人信息方法,接着构建车辆信息,再根据用户选择的保险套餐构建相应的保险条款等,最终通过生成器的获取保单方法得到完整的保单对象。通过运用生成器模式,将复杂保单的创建过程进行了清晰的分解和组装。在系统拓展新的保单类型或调整保单内容结构时,只需新增具体的保单生成器实现类或修改现有生成器类的构建方法,而无需对整体的保单创建逻辑进行大规模改动。这显著提高了保单生成模块的可维护性和可扩展性。

        二、代理模式在三方接口访问中的应用

        在车险理赔环节,系统需要获取一些第三方的数据,如车辆维修厂的维修记录、交警部门的事故认定信息等。由于这些数据来源于外部系统,访问过程中可能会因网络波动或对方系统故障导致超时问题的发生,为了提升系统的性能和稳定性,我们引入了代理模式,通过动态代理技术对原来的第三方数据访问类进行增强,生成对应的代理类,使其专门负责与第三方系统进行通信来获取数据。一方面,我们在代理类中添加了缓存机制,如果在一定时间内请求相同的数据,则直接从缓存中获取,减少了对第三方系统的访问频次,提升了系统的响应速度。另一方面,我们还在代理类当中添加了熔断机制,当所访问的接口存在频繁超时的情况时,触发接口的熔断,返回预先设定好的错误提示信息,防止系统服务被拖垮。通过应用代理模式,我们有效地控制了对第三方数据的访问,提高了系统的性能和稳定性。而且,通过在代理类中引入容错机制,成功避免因第三方系统接口调用超时引发的 “雪崩” 效应,确保了系统的持续可靠运行。

        三、策略模式在报价引擎中的应用

        车险系统的报价流程复杂,涉及多种车辆类型和不同风险因素,传统的硬编码方式难以灵活应对业务变化和新需求。因此,我们引入策略模式,通过将不同车辆类型的报价逻辑封装成独立的策略类,实现代码的解耦与可维护性。具体实现过程中,我们定义了一个报价策略接口,接口中包含计算报价的方法。针对家用燃油车、新能源汽车、载人出租车、载人大客车、货车、商务用车等不同类型的车辆,分别创建具体的报价策略实现类。每个实现类都实现了计算报价方法,依据自身业务逻辑进行报价计算。例如,对于新能源汽车,考虑其动力系统的独特性、电池衰减等问题,创建了新能源汽车报价策略类,着重考量电池寿命、充电设施分布等因素进行报价计算;对于载人出租车,考虑其运营时间长、行驶里程多,面临的风险相对复杂的特点,创建了载人出租车报价策略类,综合考虑运营区域、司机工作时长等情况进行报价计算。策略模式的应用,赋予了报价引擎高度的灵活性。随着业务发展和市场变化,公司可随时新增或修改报价策略。这不仅极大提高了系统对业务变化的响应能力,还使报价相关的代码结构更加清晰,便于维护和扩展。

        该系统开发耗时6个月时间,于2021年10月完成首个版本的全面上线,至今已在升级维护中稳定运行3年多的时间。截止目前,系统内在保的车辆涉及营运类、非营运类的客车、货车、私家车总共200多万辆,每年大概创造50多亿的保费总收入,为公司带来了不小的经济收益。

        在车险系统的开发过程中,通过合理运用软件设计模式,如工厂模式、代理模式、观察者模式、单例模式以及建造者模式等,我们成功地应对了系统复杂性高、业务需求多变等挑战,显著提升了系统的可维护性、可扩展性和可复用性。这些设计模式的应用不仅降低了软件开发成本,提高了开发效率,还使得系统在运行过程中更加稳定可靠,为保险公司提供了高效、灵活的车险业务管理平台。在未来的软件开发项目中,我们将继续深入研究和应用软件设计模式,不断探索如何更好地利用设计模式来优化系统架构,提高软件开发的效率和质量,以应对日益复杂的软件系统开发需求。


图片

图片

🎁2025年11月软考架构论文预测

⚠️点击链接,领取全部架构论文备考资料:2025年11月软考架构论文预测

更多推荐