数据结构
文章平均质量分 59
程序员雪球
职业:程序员,互联网创业;
技术专长:网络爬虫,数据分析,自动化;
专注复利三件事:死磕技术,提升财富认知,探索财务自由之路,欢迎关注,交流
展开
-
11、【桥接模式】让将抽象和实现分离,使得它们可以独立地变化
然后,我们调用 draw() 方法,实际执行的是 RedImplementation 对象的 getColor() 方法,从而实现了桥接模式的效果。在桥接模式中,抽象类层次结构中的抽象类通过引用或组合的方式与实现类层次结构中的实现类进行关联。在桥接模式中,抽象类层次结构中的抽象类通过引用或组合的方式与实现类层次结构中的实现类进行关联。4. 可复用性:桥接模式将抽象部分和实现部分分离,使得抽象类可以在不同的系统中复用,而实现类可以根据具体需求进行定制。聊聊它的设计思想、应用场景,以及如何使用。原创 2024-04-20 10:09:57 · 1139 阅读 · 0 评论 -
6、【单例模式】确保了一个类在程序运行期间只有一个实例
1. 数据库连接:在数据库应用中,创建一个单例的数据库连接管理器,确保整个应用程序只有一个连接对象,避免了多次创建和释放连接的开销。2. 耦合性高:单例模式将对象的创建和使用紧密地耦合在一起,可能导致其他模块对单例对象的依赖增加,降低了系统的可维护性和可扩展性。4. 控制对象创建:使用单例模式可以集中管理对象的创建过程,避免了在程序的多个部分随意创建对象,提高了代码的可维护性和可控性。3. 测试困难:在单元测试中,对单例对象的测试可能比较复杂,需要特殊的处理来模拟单例环境,增加了测试的难度。原创 2024-04-01 20:16:41 · 1499 阅读 · 0 评论 -
设计模式之单例模式的实现形式、弊端以及可替代的解决方案。
1. 饿汉式:在类加载期间,就已经将 instance 静态实例初始化好了,所以 instance 实例的创建是线程安全的。这种实现方式通过 JAVA 枚举类型本身的特性,保证了实例创建的线程安全性也实例的唯一性。这种实现方式,既支持延迟加载,也支持高并发,实现起来也比双重检测简单。3. Spring 的 IOC 容器:提供依赖注入,实现类的全局唯一性,同时支持参数化的构造函数,从根本上解决了单例模式的问题。2. 工厂模式:通过工厂类创建实例,支持参数化的构造函数,解决了单例模式的部分弊端。原创 2023-07-18 10:12:17 · 344 阅读 · 2 评论 -
四、程序员如何高质量重构代码?
大规模重构是对顶层代码设计的重构,包括系统、模块、代码结构、类与类之间的关系等重构,主要手段有分层、模块化、解耦、抽象可复用性组件等。为了保证重构代码不出错,需要熟练掌握各种设计原则、思想、模式,并对重构的业务和代码有足够的了解。重构代码是程序员必备的技能之一,需要有系统的全局认识,包括为什么要重构、重构什么、如何重构等方面。在进行大规模重构前,应制定重构计划,并根据计划逐步完成重构,每个阶段完成一小部分的重构,然后执行单元测试、提交代码,再进行下一阶段的重构,以确保代码一直处于正确、可运行状态。原创 2023-07-13 09:39:51 · 336 阅读 · 1 评论 -
三、1如何运用设计原则之SOLID原则写出高质量代码?
对输入,输出,异常的约定;也就是添加一个新的功能时,应该在已有的代码基础是扩展新的模块,类,方法等,而不是修改已有代码(模块,类,方法等),所以说代码的扩展性是重点。是一种编程技巧,不通过new()的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数,构造参数等方式传递(或注入)给类使用,这样提高了代码的扩展性。我们通过依赖注入框架提供的扩展点,简单配置所需要的类,以及类与类之间依赖关系,就可以实现由框架来自动创建对象,管理对象是生命周期,依赖注入等原本需要程序员来做的事情。原创 2023-07-03 19:13:53 · 268 阅读 · 0 评论 -
二、2面向对象比面向过程编程有什么优势?
面向过程编程也是一种编程风格,它以过程(可以理解为方法,函数,操作)作为组织代码的基本单元,以数据(可以理解为成员变量,属性)与方法相分离为主要特点。优势1:oop更加能够应对大规模复杂程序的开发开发,能够清晰的,模块化的组织代码。比如我们开发一个电商交易系统,业务逻辑复杂,代码量很大,可能要定义好数百个函数,数百个数据结构,那如何分门别类这些函数和数据结构,才能不至于看起来比较凌乱呢?因为oop具有更加丰富的特性(封装,抽象,继承,多态),利用这些特性编写出来的代码,更加易扩展,易复用,易维护。原创 2023-07-02 22:41:44 · 267 阅读 · 0 评论 -
二、1什么是面向对象编程?
多态可以提高代码的扩展性和复用性,是很多设计模式,设计原则,编程技巧的代码实现基础。表示类之间的is-a关系,分为两种模式:单继承和多继承,单继承表示一个子类只能继承一个父类,多继承表示一个子类可以继承多个父类。主要是如何隐藏方法的具体实现,让使用者只关心方法提供了哪些功能,抽象通过接口类和抽象类来实现,比如JAVA的interface和abstract关键字语法。它以类或对象作为组织代码的基本单元,并将封装,抽象,继承,多态四个特性,作为代码设计的实现基石。二仅暴露有限的必要接口,提高类的易用性。原创 2023-07-01 11:50:01 · 169 阅读 · 0 评论 -
一、什么是高质量代码?
指的是当我们要实现一个新功能时,发现现有的代码已经抽象出了很多底层可以复用的模块,类代码,我们可以直接拿来用,说明代码写得很灵活。我觉得应该有7个特征,分别是:可维护性,可读性,可扩展性,灵活性,简洁性,可复用性和可测试性,接下来容我一一介绍。比如,命名不规范,代码结构混乱,高度耦合等。指的是我们添加性功能时,尽量不修改或者少改原有的代码的情况下,直接在扩展点插入新的功能代码。指的是尽量复用已有的代码,减少重复代码的编写,比如面向对象的继承,多态特性。指的是代码简洁,易懂,逻辑清晰,意味着易度,已维护。原创 2023-06-30 13:01:23 · 246 阅读 · 0 评论 -
设计原则之迪米特法则(LOD)
它还有个更加达意的名字,叫作最小知识原则,英文全称:The Least Knowledg Principle。通俗的讲是:不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。“高内聚”用来指导类本身的设计,“松耦合”用来指导类与类之间依赖关系的设计;指相近功能应该放在同一个类,不相近的功能不要放在同一个类中。因为相近的功能往往会被同时修改,放在同一个类中方便维护。指的是类与类之间的依赖关系简单清晰。即使两个类有依赖关系,一个类的代码改动不会或者很少依赖类的代码改动。原创 2023-06-29 15:10:02 · 130 阅读 · 0 评论 -
集合排序,并查找某个数值的排名
package demo;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Student { private int age; private String name; ...原创 2019-04-26 14:04:18 · 518 阅读 · 0 评论 -
重复数据快速去重方法哪家好?
1for循环遍历:实现思路:使用两个for循环遍历集合所有元素,然后进行判断是否有相同元素,如果有,则去除。这种方式是大部分最先想到的,也是最简单的实现方式。其中,这种方式可以保证List集合原来的顺序不变。2HashSet实现实现思路:我们知道HashSet实现了Set接口,不允许出现重复元素。可以基于这个想法,把List集合所有元素存入HashSet对象,接着把List集合...转载 2019-04-04 17:02:20 · 800 阅读 · 0 评论 -
java常见集合用法与比较
一,ArrayList vs LinkedList 区别1,ArrayList的随机访问更高2,LinkedList在头/尾节点执行插入/删除操作的效率比ArrayList要高3,ArrayList每次扩容的容量是当前的1.5倍,LinkedList所占的内存空间要更小一些4,ArrayList可以使用get(int)方式,LinkedList时应用iterator方式,否则效率会...原创 2018-11-29 16:39:13 · 374 阅读 · 0 评论