![](https://img-blog.csdnimg.cn/20181127112545991.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式活用
文章平均质量分 95
该专栏主要通过各种重构案例,进行讲解,阐述设计原则与设计模式的重要性以及价值意义。
秋夜无霜
好学Java
展开
-
原创|关于一次产品需求程序设计及优化的经历
由于一次需求变更,由于的业务流程不支持这种新的场景,这也意味着需要设计支持新场景的业务逻辑处理。但是又要考虑后期的扩展性,同时尽可能不影响原来的业务,需要分析利弊寻找一种技术设计方案来解决当前需要解决的问题。通过分析,勾勒出涉及的变动点,这些变动点如果在原有代码新增if else就会造成程序的可维护性很差,而且不利于后期场景复用,因此寻找一种策略+分发的处理机制,通过上下文封装场景,然后通过调度器来分发处理器完成处理,同时把稳定的能力下沉到能力层,跟业务场景有关的通过路由分发完成最终业务逻辑处理。原创 2023-02-18 12:19:40 · 420 阅读 · 0 评论 -
原创|对接三方服务商回调鉴权的程序代码设计
通过系统应用服务总会与三方服务商进行对接,既然有对接,就会有回调。但是此应用服务由于部署在公网访问,为了考虑系统安全系以及防止报文被篡改,这就意味着我们需要跟三方服务商进行鉴权技术方案设计。此文章,就是一个具体典型的案例,由于此应用服务有两个不同的场景,但是鉴权设计上又有不同差异之处,所以在总体程序设计上巧妙的满足场景的需求前提下,又能尽可能做到更好的扩展维护。原创 2022-12-02 21:09:43 · 1117 阅读 · 0 评论 -
原创|一个统计查询模块基于设计模式的抽象设计
我们经常会遇到形形色色的产品需求,在快速的迭代中,我们设计的代码会变得越来越臃肿。之所以会这样,来源于我们没有更好的抽象设计,仅仅是基于`Controller`、`Service`、`DAO`三层分层设计,我们把更多的业务逻辑代码通过一个个方法堆积在`Service`层。我相信大家心有体会,这个Service伴随着业务迭代会越来越多的代码。试想一下,我们应该怎么可以更好的抽象设计,来达到避免这种现象产生呢。原创 2022-11-30 21:14:11 · 753 阅读 · 0 评论 -
基于模板方法+协调者委托对现有冗余代码的改造案例
文章目录一、背景二、分析1、CustomerRelationService2、CustomerRelationServiceImpl三、重构1、UML设计2、BindContext3、AbstractBindHandler相关实现类CrzReleaseBindHandlerEscPaymentBindHandlerEscRefundBindHandlerEscReleaseBindHandler4、BindHandlerDispatcher5、CustomerRelationServiceImpl四、总结原创 2021-11-12 15:26:48 · 539 阅读 · 0 评论 -
【设计模式活用】之代码重构之DAO扮演多个职责的重构案例
在本次关于GPS优化需求项目时,发现相关功能菜单查询页面共同一个DAO接口实现类,紧接着我看了一下listAll,pre,next,countAll方法业务代码高度相似,此已说明该DAO扮演着非单一原则,其承担着 系统多个功能菜单的查询功能。文章目录1.背景介绍1.1 业务分析1.2 思路分析2、相关类图2.1、executor类图2.2、context类图3、相关源码3.1、AbstractWhereExecutor3.2、InstalledGpsQueryExecutor3.3、TobeUploa.原创 2020-06-09 22:57:30 · 279 阅读 · 2 评论 -
【设计模式活用】之接口改造案例的设计思路(代理、适配器、工厂、模板方法)
文章目录1.背景概述1.1 controller层1.2 facade层2.设计思路2.1 UML图2.1.1 QueryListContext2.1.2 QueryListHandle2.1.3 QueryFlowListHandle2.1.4 QueryListHandlerFactory2.1.5 AbstractQueryListHandler2.1.6 AbstractQueryFlow...原创 2019-06-16 12:28:53 · 1588 阅读 · 0 评论 -
【设计模式活用】之工厂方法模式的几种实现方式
工厂方法适用于派生不同的产品类,而对于产品类则交由工厂类创建,对于客户端无需关注产品是如何创建的,把创建的细节委托给工厂统一处理。但是工厂方法从代码设计又有几种设计方法,我们切看几种方式实现的差异。1.正统工厂方法模式特征归纳:1、产品类继承抽象类或者实现共同的接口。2、工厂类实现接口,接口方法是产品子类共同的抽象类或接口。3、工厂类通过枚举控制输入类型,以返回对应类型的对象实例。...原创 2019-05-30 22:23:10 · 584 阅读 · 0 评论 -
【设计模式活用】之基于google guava和redis的一二级缓存设计实现
我们通常在接口QPS特别比较高的情况下,为了减少对数据库的频繁查询,会引入缓存,以提高接口查询性能。但是对于缓存,为了减少对Redis耦合依赖,以进一步减少网络调用,通常又会引入一级缓存,这样一二级缓存双保险可以避免缓存击穿而带来数据库QPS瓶颈而带来的灾难。而本文采用基于google guava(一级缓存)+redis(二级缓存)设计实现,同时为了后期扩展性一级可维护性,即所谓的“开闭“原则...原创 2019-05-18 16:36:17 · 2304 阅读 · 4 评论 -
基于oval注解与自定义aspect应用对接口DTO数据约束校验
我们在对外提供接口服务时,对于参数校验总会存在大量的if条件语句判断,代码冗余,本来代码看起来挺干净整洁的,但是恰巧看到这些大量的if判断语句代码,显得那么碍眼。因此,我们在开发的道路上,总会想到是否有更好地方法以解决这种碍眼的代码?鉴于我的实践道路上,我悟出了自己的一条光明之路,以分享给大家,那就是基于oval的entity注解+aspect实现。1、初识Ovaloval,是...原创 2018-09-11 18:24:36 · 1327 阅读 · 0 评论 -
【设计模式活用】之金融产品中心之设计模式的应用案例
本文阐述如何运用设计模式在代码设计中的应用,通过案例说明介绍。本文涉及的业务需求场景有:计算引擎、资金方准入、产品规则准入、产品费用项重置。通过案例引用的设计模式包括:模板方法模式、责任链模式、策略模式、工厂方法模式、中介者模式、观察者模式。1、设计原则的应用意义2、揭秘计算引擎的设计理念目前金融产品的核心是面向车贷放款前车贷总金额的公式,因此其根本也就是围绕着车贷费用项的计算,这些...原创 2018-11-19 20:07:31 · 1449 阅读 · 0 评论 -
【设计模式活用】之适配器、中介者、简单工厂、享元模式的示例应用
最近有一个需求,由于涉及调用第三方接口有所改变,而需求所涉及的应用(lyqc-cas)由于涉及一个基于暴露dubbo服务的应用(lyqc-data),而目前又不想再修改这个应用,只好在一个新应用(gps-provider)中提供基于Eureka服务注册。但是对于该需求,新提供的接口又不兼容老的代码调用,而又希望通过开关开启关闭,以防上线新接口有问题,可以进行降级。鉴于此,认真想了一下,通过设计模...原创 2018-10-02 22:25:20 · 314 阅读 · 0 评论 -
【设计模式活用】之switch case重构案例精讲
目前系统应用中,有一个业务功能模块,是提供一个页面查询结果接口,通过参数控制以调用查询不同接口数据集,并对查询结果集做相应处理,封装并返回调用方。但是,该方法体使用了switch case控制不同业务场景,造成方法体行数较长,而每次新增业务又需要变动该方法,存在冗余的代码。鉴于此,通过分析业务逻辑,并进行抽象封装。1、案例再现1.1、原始的switch case 业务代码逻辑public...原创 2018-11-21 16:26:34 · 5619 阅读 · 0 评论 -
【设计模式活用】之一个榨汁机应用场景示例
文章目录1、原料定义抽象水果类:AbstractFruit具体水果类:Apple具体水果类:Banana2、机器定义榨汁接口:Juicing果汁类:Juice抽象榨汁机:AbstractJuicer通用榨汁机类:GeneralJuicer3、榨汁比例策略比例配置类:ScaleConfig榨汁策略上线文:ScaleContext抽象榨汁输出策略类:AbstractJuiceStrategy苹果原...原创 2018-10-05 18:25:35 · 1798 阅读 · 0 评论