自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MaoLin Tian's Blog

from Bird to God(mdzz的直译)

  • 博客(487)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 【Java设计模式 规范与重构】 六 代码重构小结

代码重构实际上是设计思想、设计原则、设计模式、编程规范的一个练兵场,通过掌握这些知识,对代码存在的问题进行诊断,依据诊断结果进行重构,才能保证写出高质量有活力的代码!【Java设计模式 规范与重构】 一 重构的目的、内容、时机、方法【Java设计模式 规范与重构】 二 重构的保障:单元测试,以及如何提高代码可测试性【Java设计模式 规范与重构】 三 大型重构的手段:高内聚,低耦合【Java设计模式 规范与重构】 四 小型重构的手段:规范的十五条军规。

2022-09-25 14:17:07 211

原创 【Java设计模式 思想原则重构】设计思想、设计原则、重构总结

对于总结的总结来说,好像没什么可说的,一言以蔽之:通过继承、封装、多态、抽象、基于接口而非实现编程、多用组合少用继承、高内聚-松耦合、控制反转等设计思想;SOLID、KISS、DRY、YAGNI、LOD等设计原则和法则;创建型、结构型、行为型这些设计模式;依赖注入等编程技巧;模块化等系统设计技巧;命名与注释、编程风格、编程技巧等编程规范,在持续的重构中发挥作用。通过单元测试保证重构的顺利进行。而最终的目的都是保证易扩展、易维护、易复用、易读、简介、灵活、易测试的高质量代码活力常在。

2022-09-25 13:46:24 215

原创 【Java设计模式 规范与重构】 五 重构实战:基于ID生成器case

用一句话总结一下,重构就是发现代码质量问题,并且对其进行优化的过程。面对一段看起来烂但又不能准确全面的分析的代码时,先依次通过代码诊断的常规检查CheckList和业务检查CheckList将代码问题罗列出来并分类,然后制定多轮重构计划,小步快跑的一轮一轮的重构解决代码问题。这个流程其实也适用于代码CR,在给别人CR代码的时候其实也能按这个方法流程来。

2022-09-24 20:42:12 392

原创 【Java设计模式 规范与重构】 四 小型重构的手段:规范的十五条军规

代码规范是一个永久的话题,每个人的理解不一样,但是一些通用的实践还是有帮助的。之前学习了《阿里代码规范》后有了一些进步,但还是有做的不好的地方:命名时想要最达意的英文,有时候单词虽然达意但生僻,自己再看都不知道什么意思;命名没有和大家整齐划一,之前项目大家用insert,我就使用create,项目体感比较杂乱;注释做的还是不够,重要方法注释只做到了:是什么,对于为什么、怎么做没有详细说明;类中成员方法的排序也没有按照作用域排列过,静态成员也没有放到动态成员的前面;在拆分代码时有时矫枉过正,单纯为了缩代码行数

2022-09-24 14:25:23 220

原创 【Java设计模式 规范与重构】 三 大型重构的手段:高内聚,低耦合

讨论解耦的背后其实主要讨论高内聚、松耦合这个比较通用的设计思想,它不仅可以指导细粒度的类和类之间关系的设计,还能指导粗粒度的系统、架构、模块的设计。相对于编码规范,它能够在更高层次上提高代码的可读性和可维护性,是大型重构的重要手段,从面向对象设计思想层面角度就是:封装、抽象,从思想的最佳实践角度就是基于接口而非实现编程、多用组合少用继承,从设计原则层面角度就是:SRP、ISP、LOD,从设计模式角度就是:观察者模式、适配器模式等。从系统设计角度就是:模块化,从编程技巧角度就是:DI依赖注入,从学习设计模式迄

2022-09-22 23:57:23 83

原创 【Java设计模式 规范与重构】 二 重构的保障:单元测试,以及如何提高代码可测试性

单元测试好像写的没有之前多了,更多的是写相对更粗粒度的接口测试,一个主要原因就是觉得写单元测试琐碎,写接口测试能通就证明主流程OK,就能提测了,事实上在比较紧凑的迭代节奏里这是常态,幸而测试同学的集成测试比较给力,没出什么问题,但其实也不能老依赖于接口测试和集成测试,单元测试也有必要写的,更多的是通过写单测CR下自己的代码吧,践行持续重构的理念。对于代码的可测试性而言,其实我们日常基于Spring去开发,本身大多数场景都是依赖注入,所以体会可能没有那么深,至于对于远程服务的依赖,使用二次封装是个不错的方法,

2022-09-21 22:04:52 676

原创 【Java设计模式 规范与重构】 一 重构的目的、内容、时机、方法

在系统开发前期我们不可能预见所有业务需求,而且还要避免过度设计,而随着业务的发展,代码不得不随着业务发展和堆砌,导致代码的熵增、系统的无序。所以持续重构真的非常重要,它能在不改变功能的前提下保证系统的健康度和活力。对于业务发展阶段的大的变动需要通过有计划、分阶段的大型重构来达成,而常规的小型变动则仅仅通过编程规范、意识以及一些代码规范检测工具即可达成。

2022-09-19 22:04:19 226

原创 【Java设计模式 经典设计原则】 八 经典设计原则小结

其实无论是SOLID、还是KISS、YAGNI、DRY以及LOD,都是服务于写出高质量代码。简单而言就是写出:可维护性、可读性、可扩展性、灵活性、简洁性(简单、复杂)、可复用性、可测试性强的高质量代码。可读性、可维护性的一个基本设计就是写出高内聚、低耦合的代码,其中SRP服务于高内聚,ISP和LOD服务于低耦合。毋庸置疑OCP服务于代码的扩展性,LSP和DIP场景就比较具体了:LSP用于指导父子关系设计,DIP用于指导框架设计。而KISS、YAGNI以及DRY都是从代码的整体视角去告诉我们写代码要尽量简单明

2022-09-18 12:12:59 165

原创 【Java设计模式 经典设计原则】七 LOD迪米特法则

SRP原则侧重高内聚,指导类功能的设计要单一,LOD法则侧重低耦合,指导类间依赖关系要松耦合,ISP原则是从调用者的角度出发确保接口的设计具备对调用者有良好的隔离性。基于接口而非实现编程思想也是从调用者的角度出发确保稳定的依赖和可插拔的实现。总的来说SRP原则、ISP原则、LOD法则以及基于接口而非实现编程思想的目标都是实现代码的高内聚低耦合,提高代码的可扩展性、可读性和可维护性。

2022-09-17 20:36:34 195

原创 【Java设计模式 经典设计原则】六 KISS、YAGNI和DRY原则

KISS 原则讲的是“如何做”的问题(尽量保持简单),它的目的是提升代码的可读性、可维护性,而 YAGNI 原则说的是“要不要做”的问题(当前不需要的就不要做),它的目的是降低代码的冗余度,提升代码的可维护性。DRY原则说的是不要做重复的事,它的目的是减少代码量,提高代码的可读性、可维护性。除此之外,复用已经经过测试的老代码,bug 会比从零重新开发要少,也就提高了代码健壮性。所以要有代码复用意识、写可复用性强的代码、不要违反DRY的去添加重复功能。不要违反YAGNI去过度设计,不要违反KISS去单纯的炫技

2022-09-17 16:26:45 212

原创 【Java设计模式 经典设计原则】五 SOLID-DIP依赖反转原则

理不辨不明,IOC是一种指导框架设计的思想,通过控制反转接管大量与核心业务逻辑无关的内容,让RD能专注业务逻辑开发,按照规范将代码注册到框架预留扩展点即可。而DI是IOC思想的一种具体实现方式,主要用于外部创建对象注入给当前对象,Spring中对DI的使用则更加具体为在运行时通过反射创建外部依赖对象并注入当前对象,所以Spring是一种贯彻IOC思想的通过DI实现的一个框架。依赖反转是一种设计原则,也是指导框架设计的,它关注的是如何约束框架代码和业务代码的关系,高层(框架)的运行不依赖于底层(业务代码),而

2022-09-16 23:25:33 557

原创 【Java设计模式 经典设计原则】三 SOLID-LSP里式替换原则

LSP乍一看对子类的实现限制有点儿死,但这样的好处是让父子类的继承关系更加健壮,相同方法子类能对父类功能做增强但又不会因此而带来预期外的结果或副作用。例如1.0版本的Sort接口基于LSP的实现为冒泡排序,2.0版本基于LSP增加了快速排序,这个时候用快速排序替换冒泡排序增强了排序效果,但又不脱离Sort的功能范围,影响Sort的正常逻辑。

2022-09-15 23:21:21 108

原创 【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则

ISP中的接口对于不同功能诉求的使用者来说,可以当做一组 API 接口或方法集合,按照使用者分类来暴露给不同使用者差异化的接口集,不要给使用者它不care的功能;对于单一功能的使用者来说,可以当做一个API接口或方法集合,按照使用者的场景诉求主观判断是否需要拆分,不要给使用者他不care的复杂方法实现;对于一个固定的需求实现而言,可以当做一个OOP的接口去看待,按照需求定义接口,不要让接口的实现类和调用者,依赖它不care的功能的接口

2022-09-15 22:40:56 111

原创 【Java设计模式 经典设计原则】二 SOLID-OCP开闭原则

OCP是相对而言的一个概念,在不同代码粒度可能就是不同的结果,所以不能认为OCP就是不改代码,而是尽量让改动更上层,集中在非核心逻辑部分,一个判断依据就是当有新功能添加时不需要改之前的核心实现逻辑并且单元测试都能通。实现OCP的方式有很多,例如依赖注入、基于接口而非实现编程、多态以及各种设计模式。但核心指导思想则是,写代码时候要多思考,要时刻具备扩展意识、抽象意识、封装意识。

2022-09-15 00:14:40 40

原创 【工作学习方法论 一】成体系的学习方法论

其实自己一直有一种朦胧的学习方法论,但是并不成体系,例如我也会拆目标,大体拆的方式也类似,也会有写博客的teach学习法的习惯,边写边做的play学习法的习惯。但这些都是零散的,这篇学习Blog从解答四个问题让学习方法论落了下来,收获最大的就是HOW【怎么学】,之前的学习笔记盲目,就是按照概述-应用-原理-实践这样的思路去学习,而今终于有了一个解决连环call的链式学习法,解决技术选型call的比较学习法,以及培养全局视野的环式学习法,一套组合拳,可以更有的放矢的学习新技术了。

2022-09-13 23:43:01 147

原创 【工作中问题解决实践 六】基于反射及类装饰模式的数据对比框架

当前这套框架其实可以基于相同实体类型的数据集合进行对比,包括多的、少的、交的。数据获取需要自己获取,后续可以通过配置数据源、配置脚本段的方式来获取数据数据获取到需要转换为同一实体,这部分代码也有开发量,未来想着通过配置实现,指定字段映射,然后将映射后的json转为对象实体,再走后续的通用流程数据对比结果拿到后后续其实还可以配置处理策略,例如newValue覆盖oldValue、舍弃newValue或是其它,拿到数据最好还是能处理一下。

2022-09-09 22:30:59 173

原创 【工作中问题解决实践 一】最小单元染色法的应用

最近在处理费率和保底费的优惠及标准区间。问题本质就是:标准合作区间是一个【时间段+标准值】,优惠合作区间是多段【时间段+标准值】,并且各个时间段的开始和结束日期可以随意指定,优惠区间和标准区间重合部分按照优惠值计算,非重合部分按照标准区间值计算。......

2022-08-12 15:31:38 113

原创 【解决方案 三十一】Navicat数据库结构同步

最近在开发过程中遇到一个问题刚经历了一个两个月的长迭代,导致测试库已经被改的面目全非了,最关键的是所有的变更语句都没有记录,这上线的时候怎么办啊,一百多张表呢,幸好组里的老程序猿说用过一个工具Navicat的数据库结构同步,问题就轻松解决了。这里我用的是单机复制了一个连接进行演示,所以没有区别,【DDL比较】体现的是建表语句比较。然后选择自己的来源库和目标库,来源库代表了我们的同步视角,例如来源库选测试库,目标库选生产库就代表了,我们要在线上的数据库执行哪些语句来完成上线。...

2022-07-31 10:10:30 489

原创 【毕业N年系列】 毕业第四年

距离上一篇 【毕业N年系列 毕业第三年】已经过去一年时间了。没想到自己当初的一个简单的想法竟然能坚持到第四年,希望自己能坚持下去吧,在耄耋古稀之年依然能回看自己的人生。疫情仍然没有彻底结束,这已经是疫情持续的第三个年头了,时光荏苒啊,每一天都好像再重复上一天。先聊聊工作和学习吧,在新的公司已经呆满一年了,很多事情也捋顺了,团队非常有爱,大家一起聚餐,出去骑行,每个人很好相处,大家工作起来也一点儿都不卷,都是目标导向的,总的来说是一个健康向上的组织,这一年自己的工作能力有了很大的提升,不再像是一个CRUD B

2022-06-19 21:28:53 1846 1

原创 【书影观后感 十三】甲申三百七十八年祭

耗时半年有余,断断续续读完了姚雪垠先生耗尽一生心血写就的330万言巨著《李自成》,思绪万千、百感交集,想来不得不罗缕片言以彰此刻的心情。至于题目便模仿郭沫若先生于1944年那个特殊时间发表的《甲申三百年祭》吧,甲申延年,后人哀之,若后人哀之而不鉴之,则使后人复哀后人矣。...............

2022-06-18 16:53:02 656

原创 【我与CSDN 创作里程碑】我与CSDN这五年

如今回看2015年的1月19日,距今已7年之余。后来倒也保持了这一光明传统,每年都新加一篇年终总结,这样回看倒也能发现自己的过去是如何步步行进的,鉴往知今。当时用的是oneNote,时至2016年的时候因为自己自学Java,所以又在OneNote上增加了一个学习笔记。但后来发现OneNote对于学习笔记尤其是代码的支持不甚好,偶然间发现了CSDN,发现上边对于各种格式都有比较好的支持,尤其是MarkDown这种编辑模式我非常喜欢,再加上可以从收集app上随时看自己之前记的笔记很是方便,于是之后便在CSDN上

2022-06-13 22:07:28 270 6

原创 【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则

单一职责原则是为了实现代码高内聚(功能相关高内聚)、低耦合(功能无关低耦合),提高代码的可复用性、可读性、可维护性。具体怎么拆分主观上依据对业务发展的认知和场景的分析持续重构,客观上依据几条可执行规则:代码的行数、属性、方法不要过多;类依赖与被依赖的程度较低;私有的通用方法不能过多;类要比较好命名,见名之意;类的属性操作比较均衡。虽然单一职责原则原则好,可不要单纯为了更单一去拆分,否则本来内聚的功能被拆分了后代码的可维护性就会变的很差。...............

2022-06-11 11:25:30 155 1

原创 【Java设计模式 面向对象设计思想】八 面向对象设计思想小结

说到面向对象设计思想,看似每个学习Java语言的人入门时都知道,类、对象等概念也耳熟能详,但是每个人对面向对象这种设计思想理解是千差万别的,就拿我来说,16年读研时初一学习Java时只知道:面向对象开发有类、对象、成员变量、方法等,学会了基本语法,然后死记硬背会了抽象类和接口的区别、类之间的关系,根本不清楚为啥有抽象类,它和接口到底啥区别,为啥有普通类了还要它?甚至说多态是啥意思都没能深入理解,以为多态就是接口。18年初刚一工作的时候想学习时新技术,去学DDD,结果只背会了一堆概念,因为没有工作实践过,写了

2022-06-05 15:38:53 141

原创 【Java设计模式 面向对象设计思想】七 面向对象分析、面向对象设计和面向对象编程

面向对象分析英文缩写是 OOA,全称是 Object Oriented Analysis;面向对象设计的英文缩写是 OOD,全称是 Object Oriented Design;面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming。OOA、OOD、OOP 三个连在一起就是面向对象分析、设计、编程(实现),正好是面向对象软件开发要经历的三个阶段,想想之前为什么我们基本没有面向对象分析和设计,主要原因就是我们进行的都是面向过程编程,我们的视角是自上而下的任务处理流程,

2022-06-04 21:05:58 285

原创 【Java设计模式 面向对象设计思想】六 再谈MVC贫血模式与DDD领域驱动开发

DDD从代码上的区别很小,就是对Service层进行重新设计并将BO升级为Domain,但是从设计和思维模式上区别很大,它是一套自底向上的面向对象思维方式和开发流程,能让我们从业务建模的视角去看问题。从可读性上来说:它可以把原来最重的service逻辑拆分并且转移一部分逻辑,可以使得代码可读性略微提高,另外,模型充血以后基于模型的业务抽象在不断的迭代之后会越来越明确,业务的细节会越来越精准,通过阅读模型的充血行为代码,能够极快的了解系统的业务,对于开发来说能说明显的提升开发效率。......

2022-06-04 13:39:08 263

原创 【Java设计模式 面向对象设计思想】五 多用组合少用继承编程

继承的问题是如果继承的层级过深,那么代码的可读性和可维护性就会变差,而且可能由于行为方法的增加导致组合爆炸。通过接口+组合+委托可以巧妙的解决这个问题且能保持继承的优势:接口可以实现继承的多态,组合+委托可以实现继承代码复用。当然多用组合少用继承也不是说完全不用继承,也是区分场景的,例如当业务结构稳定,继承层次不深的情况下,使用继承还能避免组合多定义细粒度的类的问题。而继承层次深、结构不稳定的时候,或者继承关系只是为了实现代码复用而无业务上的父子关系含义时,使用组合更加灵活、代码可读性和可扩展性、可维护性更

2022-06-03 17:31:16 137

原创 【Java设计模式 面向对象设计思想】四 基于接口而非实现编程

基于接口而非实现编程,实际上是基于抽象而非实现编程,具体到Java里就是抽象特性的体现,抽象的两个实现方式也就是上篇Blog提到的抽象类和接口类。原则的设计初衷是将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低代码间的耦合性,提高代码的扩展性。但这个原则使用时也需要注意,设计接口和实现时思维顺序要摆正,不要通过实现去反推接口定义;写代码时候也不要惯性的为每个实现类都定义接口,使用

2022-06-02 09:35:22 85

原创 【Java设计模式 面向对象设计思想】三 再谈抽象类和接口

抽象类是对成员变量和方法的抽象,是一种 is-a 关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性。如果要表示一种 is-a 的关系,并且是为了解决代码复用问题,我们就用抽象类;如果要表示一种 has-a 关系,并且是为了解决抽象而非代码复用问题,那我们就用接口。总的来看,抽象类更像是介于普通类和接口直接,既可以代码复用,又可以优雅的实现多态。...

2022-05-31 10:41:22 67

原创 【Java设计模式 面向对象设计思想】二 再谈面向对象和面向过程

面向对象还是面向过程?其实不是那么重要,我们只看最终目的:是否能写出易维护、易读、易复用、易扩展的高质量代码,面对复杂网状业务场景的时候我们更趋向于使用面向对象的方式,因为设计它的语言四大基本特性(封装、继承、抽象、多态)和代码组织方式(类和对象)具备编写高质量代码的先决条件。但这并不能说明面向过程一无是处,在简单的线状业务场景下面向过程可能会更快的实现,甚至我们经常使用的网站开发模式MVC贫血模式就是基于面向过程实现的,因为简单且流程化的思维更容易被我们理解。所以还是那个道理:谈概念和优势的时候一定要关联

2022-05-30 22:23:59 156

原创 【工作中问题解决实践 二】分布式消息并发同步处理方案

最近遇到一个问题,就是如何批量的进行数据迁移和计算,既要保证快,又要保证准,那么快怎么保证呢?分布式及并发是必然要使用的,怎么保证准呢,并发的同步(在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。执行操作有序性)是必然要使用的。.........

2022-05-27 21:59:21 140

原创 【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性

今天可以说又重新认识了一下面向对象四大特性,回顾设计模式目标,写出高质量的代码:易维护、易读、易扩展、灵活、简洁、可复用、可测试,面向对象设计思想是基本指导思想,是很多设计原则、设计模式的实现基础,后者进一步支持高质量代码目标达成。而面向对象四大特性本来被设计出来也能一定意义上本身作为一个达成路径,例如封装,可以让数据更安全,不能被随便修改,让代码更易维护;通用的抽象影响无处不在,抽象的代码设计让代码易扩展、易维护;继承让代码更加可复用;多态让代码更易扩展、易复用。它们的作用远不止这些,这些顶层的语言特性抽

2022-05-25 01:44:31 109

原创 【解决方案 二十九】如何高效优雅的在word写公式

由于本来就是对照公认的数学公式编写,所以是有现成公式的,问题是怎么在word中用公式写出来,搜寻了下让我找到了一个非常棒的软件:MathPix,免费版可以支持10张,当然咱也就需求10张:

2022-05-19 22:58:49 130

原创 【解决方案 二十八】Java实现逻辑回归预测模型

R语言实现逻辑回归预测模型可以说相当方便,因为标准的库已经有人写好了,Java似乎不擅长统计学领域,所以实现比较复杂,这里给出一个Java实现的逻辑回归预测模型实现方式以及一些常用函数:

2022-05-13 11:03:03 736 2

原创 【解决方案 二十七】如何安全稳定的Dump线上数据

有时候出于线上真实数据模拟的需求,我们需要整库把线上的数据拉到测试环境进行测试,这就涉及到整库的导入和导出问题,有这么几个问题需要处理: 1. **导出的语句和文件不能是一个**,否则如果线上数据几千万级别的情况下,会导致超时或者来自DBA的问候,所以最好一个表一个文件,一个表的话哪怕百万级也不算太慢 2. **导入的语句最好是一个**,或者支持批量选中文件导入,否则一个一个导太慢了我的实际情况是,线上有100多张表,总共大概11.5GB,数据量在2000万级别。于是调研了下方法,发现: 1.

2022-05-13 10:58:05 106

原创 【解决方案 二十六】DateGrip一键生成DML语句用于上线

在开发环境和测试环境创建好数据表后,我们想实现一键将建表语句及建索引语句等发到线上,有什么好的方式么?DateGrip可以轻松完成这个任务,例如我们想要将person表导出为建表语句

2022-05-13 10:30:12 104

原创 【Java设计模式 学习目标及大纲】高质量代码的标准及实现路径

易维护、易读、易扩展、灵活、简洁、可复用、可测试的代码就是高质量的代码,而高质量代码的达成路径工具箱包括:面向对象设计思想是基本指导思想,是很多设计原则、设计模式的实现基础;设计原则是代码设计的抽象经验总结、是设计模式设计的指导原则;设计模式是代码设计的一套具体解决方案或设计思路,主要用来提高代码可扩展性;编程规范是一套可执行的代码编写规范,主要用来提高代码的可读性;代码重构依赖面向对象设计思想、设计原则、设计模式、编程规范实现,主要用来提高代码的可维护性。也可以这么理解:1个设计思想、6个设计原则、23个

2022-05-03 22:21:30 505

原创 【Java设计模式 设计模式与范式】结构型模式小结

结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。所以我们在使用结构型模式时的出发点还是场景,例如想要进行接口兼容我们可以考虑适配器模式、想要统一加日志、AOP等可以考虑代理模式,想要功能随意组合增强的文件系统可以使用装饰器模式、想要独立变化的JDBC接口标准和开发厂商实现可以使用桥接模式,想要处理组织关系开发人事系统可以使用组合模式,想要统一接口调用可以使用外观模式,想要节省内存、共享对象可以使用享元模式。从场景出发!

2022-05-01 22:00:55 75

原创 【Java设计模式 设计模式与范式】结构型模式 七:享元模式

享元模式从概念上看非常简单,意图就是复用相似对象,结构上和多例模式、缓存、池化技术等类似都用到了工厂,但是设计意图却大相径庭,例如多例模式主要用于限制对象个数,缓存时提高对象访问效率,池化技术主要目的是节省时间。从这里也能看出,有些模型设计虽然结构非常类似,但是出发点却不同,这也印证了学习设计模式的出发点应为设计意图而非死记结构,最终结构只是设计的落地方式而已。

2022-05-01 15:02:53 613

原创 【Java设计模式 设计模式与范式】结构型模式 六:组合模式

组合模式的场景使用较为特殊,实际上就是树这种数据结构组织的对象,通过抽象复杂数据结构中的通用方法使这个复杂对象调用起来和简单对象一样容易,例如核算一个部门的成本数据,对于部门+人这类组织数据就可以理所当然的认为是一个树形结构,无论是部门这种树枝还是人这种树叶都提供计算成本的统一方法,只要构建完毕这样一个组织,那么无论是计算哪一级的成本,都统一调用计算方法即可,递归逻辑已经内置在组织构建过程中了。

2022-04-25 23:35:42 155

原创 【Java设计模式 设计模式与范式】结构型模式 五:外观模式

接口粒度设计得太大,太小都不好。太大会导致接口不可复用,太小会导致接口不易用。在实际的开发中,接口的可复用性和易用性需要权衡。针对这个问题,一个基本的处理原则是,尽量保持接口的可复用性,但针对特殊情况,允许提供冗余的门面接口,来提供更易用的接口。其实外观模式我们日常都会不经意间使用,就是分层里更上层的业务层,封装聚合了下层单一行为接口,为调用者提供一个独立且与下层接口解耦的功能。

2022-04-19 22:51:43 238

原则的详细读书笔记罗列

关于原则的xmind,关于原则的分析,瑞达里欧的原则分享,原则这本书还是很不错的,自己整理了学习笔记,分享给大家一起看看

2020-11-05

vs_enterprise.exe

VisualStudio2019企业版,最新版本,激活码BF8Y8-GN2QH-T84XB-QVY3B-RC4DF

2019-09-13

Visual Studio2015的圈复杂度检测工具code metrics

这个工具是用于检测代码圈复杂度的,可以显而易见的标注每个方法的圈复杂度,并且依据大小有颜色直观的显示

2018-02-02

Java面试大全

这是我自面试以来做过的最全的总结,包括 计算机网络 java web mysql 设计模式 JVM 剑指offer hashmap源码分析,还有一些可以从我博客上看http://blog.csdn.net/sinat_33087001本来想免费分享给大家,但好像最少得选一个,所以只能设置为1,希望能够帮助大家。

2017-10-10

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除