![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 66
冲冲冲ccc
这个作者很懒,什么都没留下…
展开
-
设计原则与思想:规范与重构 理论一 - 三 什么情况下要重构?到底重构什么?又该如何重构?有哪些非常能落地的技术手段?如何写出可测试性好的代码?
单元测试定义(解答了为什么我们都假设外部依赖返回都是我们预期结果?):单元测试主要是测试程序员自己编写的代码逻辑的正确性,并非是端到端的集成测试,它不需要测试所依赖的外部系统(分布式锁、WalletRPC 服务)的逻辑正确性。所以,如果代码中依赖了外部系统或者不可控组件,比如,需要依赖数据库、网络通信、文件系统等,那我们就需要将被测代码与外部系统解依赖,而这种解依赖的方法就叫作“mock”。所谓的 mock 就是用一个“假”的服务替换真正的服务。mock 的服务完全在我们的控制之下,模拟输出我们想要的数据。原创 2024-08-14 20:17:00 · 1015 阅读 · 0 评论 -
设计原则与思想:设计原则(下)- 理论五 - 八 控制反转、依赖反转、依赖注入这三者有何区别和联系?为何说KISS、YAGNI原则为何经常被用错?重复的代码就一定违背DRY吗?如何用迪米特法则?
我们通过依赖注入框架提供的扩展点,简单配置一下所有需要的类及其类与类之间依赖关系,就可以实现由框架来自动创建对象、管理对象的生命周期、依赖注入等原本需要程序员来做的事情。我们在第一次写代码的时候,如果当下没有复用的需求,而未来的复用需求也不是特别明确,并且开发可复用代码的成本比较高,那我们就不需要考虑代码的复用性。KISS 原则讲的是“如何做”的问题(尽量保持简单),而 YAGNI 原则说的是“要不要做”的问题(当前不需要的就不要做)。我们可以不写可复用的代码,但一定不能写重复的代码。原创 2024-08-13 16:15:40 · 968 阅读 · 0 评论 -
设计模式之美-导读
目的:本质上都是服务于编写高质量代码这一件事的(也就是前面说的七个标准)贯穿全文的目标。主观性很强,评判维度很多,我们就以代码好不好改为准。如何才能写出高质量的代码?如何评价代码质量的高低?原创 2024-08-05 12:11:26 · 550 阅读 · 0 评论 -
理论一:当谈论面向对象的时候,我们到底在谈论什么?
如果放宽要求的话,只要某种编程语言支持类、对象语法机制,那基本上就可以说这种编程语言是面向对象编程语言了,不一定非得要求具有所有的四大特性。面向对象编程一般使用面向对象编程语言来进行,但是,不用面向对象编程语言,我们照样可以进行面向对象编程。反过来讲,即便我们使用面向对象编程语言,写出来的代码也不一定是面向对象编程风格的,也有可能是面向过程编程风格的。面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。什么是面向对象编程语言?原创 2024-08-06 10:12:27 · 243 阅读 · 0 评论 -
理论二:封装、抽象、继承、多态分别可以解决哪些编程问题?
关于封装特性(也叫作信息隐藏或者数据访问保护)目的:封装特性存在的意义,一方面是保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。实现:类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如Java 中的 private、protected、public 关键字。关于抽象特性目的:抽象存在的意义,一方面是提高代码的可扩展性、维护性,修改实现不需要改变定义,少代码的改动范围;另一原创 2024-08-07 12:00:00 · 366 阅读 · 0 评论 -
理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?
OOP 风格的代码更易复用、易扩展、易维护。OOP 语言更加人性化、更加高级、更加智能。OOP 更加能够应对大规模复杂程序的开发。原创 2024-08-08 10:00:49 · 547 阅读 · 0 评论 -
理论四:哪些代码设计看似是面向对象,实际是面向过程的?
概述:在面向对象编程中,常见的全局变量有单例类对象、静态成员变量、常量等,常见的全局方法有静态方法。静态成员变量归属于类上的数据,被所有的实例化对象所共享,也相当于一定程度上的全局变量。而常量是一种非常常见的全局变量,比如一些代码中的配置参数,一般都设置为常量,放到一个 Constants 类中。你可以联想一下我们常用的各种 Utils 类,里面的方法一般都会定义成静态方法,可以在不用创建对象的情况下,直接拿来使用。这些全局变量和全局方法中,Constants 类和 Utils 类最常用到。原创 2024-08-10 11:19:25 · 515 阅读 · 0 评论 -
理论五 - 七 接口和抽象类的区别、为什么基于接口而非实现编程、为何说要多用组合少用继承
如何解读原则中的“接口”二字?“基于接口而非实现编程”,这条原则的另一个表述方式,是“基于抽象而非实现编程”。从本质上来看,“接口”就是一组“协议”或者“约定”,是功能提供者提供给使用者的一个“功能列表”。在编程语言里实现为编程语言中的接口或者抽象类。如何将这条原则应用到实战中?我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展性、可维护性。总结一下,我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。原创 2024-08-11 11:03:06 · 1208 阅读 · 0 评论 -
设计原则与思想:设计原则(上) 理论一 - 四 如何理解单一职责原则?如何做到“对扩展开放、修改关闭”?里式替换跟多态有何区别?接口隔离原则有哪三种应用?
在写代码的时候,我们要多花点时间思考一下,这段代码未来可能有哪些需求变更,如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,在不改动代码整体结构、做到最小代码改动的情况下,将新的代码灵活地插入到扩展点上。不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责是否单一,可能会有不同的判定结果。最常用来提高代码扩展性的方法有:多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、职责链、状态)。类依赖的其他类过多,或者依赖类的其他类过多。原创 2024-08-12 10:58:47 · 785 阅读 · 0 评论