
业务逻辑
文章平均质量分 64
程序员雪球
职业:程序员,互联网创业;
技术专长:网络爬虫,数据分析,自动化;
专注复利三件事:死磕技术,提升财富认知,探索财务自由之路,欢迎关注,交流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13、【适配器模式】让不兼容的类能够一起工作
在软件设计中,有时我们会遇到这样的问题:我们需要使用一些现有的类或接口,但是这些类或接口的接口与我们的需求不匹配。1. 旧系统升级:在旧系统升级时,可能需要使用新的接口或类,但旧系统中的某些代码仍然需要使用旧的接口或类。这时,可以使用适配器模式来将旧的接口或类适配到新的接口或类上,从而实现系统的平滑升级。适配器模式的实现原理是创建一个适配器类,该类继承或实现需要适配的类或接口,并在适配器类中实现需要的功能。创建一个适配器类,该类继承或实现需要适配的类或接口,并在适配器类中实现需要的功能。原创 2024-05-13 12:09:53 · 602 阅读 · 0 评论 -
12、【装饰器模式】动态地为对象添加新功能
装饰器模式通过创建一个包装类来包装原始类的实例,并在包装类中提供新的功能,从而避免了这些问题。装饰器模式的优点是可以在不改变原始类的基础上,动态地为对象添加新的功能或行为,从而提高系统的扩展性和灵活性。1. 扩展性:如果你的系统需要不断地添加新的功能,而这些功能可能会影响到现有类的结构,那么使用装饰器模式可以避免修改现有类的代码,从而提高系统的扩展性。4. 可维护性:如果你的系统中有一些复杂的功能,例如权限验证、数据加密等,那么使用装饰器模式可以将这些功能封装成装饰器类,从而提高系统的可维护性。原创 2024-04-23 12:42:03 · 1062 阅读 · 0 评论 -
11、【桥接模式】让将抽象和实现分离,使得它们可以独立地变化
然后,我们调用 draw() 方法,实际执行的是 RedImplementation 对象的 getColor() 方法,从而实现了桥接模式的效果。在桥接模式中,抽象类层次结构中的抽象类通过引用或组合的方式与实现类层次结构中的实现类进行关联。在桥接模式中,抽象类层次结构中的抽象类通过引用或组合的方式与实现类层次结构中的实现类进行关联。4. 可复用性:桥接模式将抽象部分和实现部分分离,使得抽象类可以在不同的系统中复用,而实现类可以根据具体需求进行定制。聊聊它的设计思想、应用场景,以及如何使用。原创 2024-04-20 10:09:57 · 1241 阅读 · 0 评论 -
10、【代理模式】通过引入一个代理对象来控制对原始对象的访问的方式。
动态代理是在运行时动态创建的代理类,它通过使用反射机制在运行时生成代理对象的字节码,并将其加载到 JVM 中。静态代理是在编译时创建的代理类,它通过继承原始对象的类或实现其接口,并在其中重写需要代理的方法来实现。今天我们了解代理模式的原理、静态代理和动态代理的区别、Spring AOP 和动态代理的关系、代理模式的使用场景,以及用 Java 实现一个动态代理示例。静态代理是在编译时创建的代理类,它通过继承原始对象的类或实现其接口,并在其中重写需要代理的方法来实现。原创 2024-04-15 21:45:10 · 1160 阅读 · 0 评论 -
9【原型模式】复制一个已存在的对象来创建新的对象
浅拷贝只复制对象的引用,而不复制对象的内容,因此在修改原始对象时,复制对象也会受到影响。深拷贝则会复制对象的所有内容,包括嵌套对象,因此在修改原始对象时,复制对象不会受到影响。原型模式是一种创建对象的模式,它通过复制一个已存在的对象来创建新的对象,而不是通过传统的 new 操作符来创建对象。1、浅拷贝只复制对象的引用,而不复制对象的内容,因此在修改原始对象时,复制对象也会受到影响。2、深拷贝则会复制对象的所有内容,包括嵌套对象,因此在修改原始对象时,复制对象不会受到影响。// 获取对象的名称。原创 2024-04-14 18:20:13 · 900 阅读 · 0 评论 -
8、【构造者模式】适合于需要创建复杂对象的场景
在这些场景中,对象的创建过程可能涉及多个步骤和多个部件,使用建造者模式可以将对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中,从而提高代码的灵活性和可复用性。1. 类的数量增多:由于将对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中,因此需要创建多个建造者类,从而增加了类的数量。3. 可复用性强:建造者模式将对象的创建过程分解为多个步骤,可以将这些步骤封装在独立的建造者类中,从而提高了代码的可复用性。.addTopping("香肠", 1);.setDrink("可乐")原创 2024-04-13 18:41:26 · 958 阅读 · 0 评论 -
7、【工厂模式】让对象的创建和使用分离
根据传入的参数,工厂会返回相应的 phone 对象。总的来说,工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离,客户端不需要知道具体产品类的类名,只需要知道具体产品类所对应的工厂类即可,通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。- 客户端不知道具体产品类的类名,只需要知道具体产品类所对应的工厂类即可,通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。原创 2024-04-11 18:30:54 · 654 阅读 · 0 评论 -
6、【单例模式】确保了一个类在程序运行期间只有一个实例
1. 数据库连接:在数据库应用中,创建一个单例的数据库连接管理器,确保整个应用程序只有一个连接对象,避免了多次创建和释放连接的开销。2. 耦合性高:单例模式将对象的创建和使用紧密地耦合在一起,可能导致其他模块对单例对象的依赖增加,降低了系统的可维护性和可扩展性。4. 控制对象创建:使用单例模式可以集中管理对象的创建过程,避免了在程序的多个部分随意创建对象,提高了代码的可维护性和可控性。3. 测试困难:在单元测试中,对单例对象的测试可能比较复杂,需要特殊的处理来模拟单例环境,增加了测试的难度。原创 2024-04-01 20:16:41 · 1556 阅读 · 0 评论 -
4、【设计原则】程序员需要掌握的编码设计理论
这个原则的核心思想是,我们不应该在代码中添加我们当前不需要的功能或代码。1. SOLID 原则:这是由罗伯特·C·马丁(Robert C. Martin)提出的五个设计原则的缩写,分别是SRP(单一职责原则)、OCP(开闭原则)、LSP(里氏替换原则)、ISP(接口隔离原则)和DIP(依赖倒置原则)。这意味着我们应该将重复的代码提取到一个单独的函数或类中,并在需要的地方调用它。软件开发的设计原则是指在软件设计过程中应该遵循的一些基本原则,这些原则可以帮助开发人员设计出高质量、可维护、可扩展的软件系统。原创 2024-02-29 09:44:13 · 452 阅读 · 0 评论 -
2、【程序员】如何识别代码好坏?如何写出高质量代码?
要写出高质量代码,需要掌握编程语言和开发工具,遵循编码规范,掌握面向对象编程思想,遵循设计原则,合理使用设计模式,代码持续重构等。6. 代码持续重构:掌握代码重构的技能可以帮助开发人员写出更好的代码,提高开发效率和代码质量,并使代码更容易维护和扩展。3. 掌握面向对象编程:通过封装、抽象,继承和多态等特性,使得代码更加模块化、可复用、易维护和扩展。又如何写出高质量代码呢?2. 遵循编码规范:遵循团队或行业的编码规范,保持代码的一致性和可读性。4. 重复代码:代码中存在大量重复的代码片段,缺乏可复用性。原创 2024-02-25 17:33:50 · 618 阅读 · 0 评论 -
5、【代码重构】让代码更清晰,高效,可维护
代码重构是软件开发过程中不可或缺的一部分,它可以帮助我们提高代码的质量和可读性,同时降低代码的维护成本。4. 团队协作:代码重构应该是一个团队协作的过程,应该与其他开发人员进行充分的沟通和协作,鼓励开发在空余时间,重新审视自己写过的代码,持续重构。2. 提高代码质量:重构可以帮助发现和修复代码中的问题,如重复代码、过长的方法、不合理的变量命名等,从而提高代码的质量。通过重构,可以使代码更易于共享和维护。5. 代码变更频繁:当代码变更频繁时,应该考虑进行代码重构,以减少代码的复杂性和提高代码的可读性。原创 2024-02-23 15:42:03 · 1190 阅读 · 0 评论 -
3、【面向对象编程思想】四大特性,程序员必会
它是一种编程思想,它将数据和对数据的操作封装在一起,形成一个对象。2. 继承(Inheritance):通过继承现有类来创建新类,新类可以继承父类的属性和方法,并可以添加自己的属性和方法。1. 封装(Encapsulation):将数据和对数据的操作封装在一起,形成一个对象。4. 抽象(Abstraction):将具有相同特征的对象抽象成一个类,从而实现对对象的抽象和概括。OOP 的四大特性分别是封装、继承、多态和抽象,它们是 OOP 的核心概念,也是 OOP 编程的基础。请在评论区写下你的答案吧。原创 2024-02-21 20:55:47 · 508 阅读 · 0 评论 -
1,程序员为什么要学习设计模式?
阅读优秀的开源代码可以帮助程序员学习到很多有用的编程技巧和经验,而设计模式是一种常见的编程思想和方法,它可以帮助程序员更好地设计和实现代码。最后,设计模式可以提高代码的性能。在编写自己的代码时,程序员可以根据具体的问题选择合适的设计模式,从而提高代码的质量和可维护性。因此,写出高质量的代码需要掌握设计模式,这可以帮助程序员提高代码的可读性、可维护性和性能,从而提高软件的质量。因此,阅读优秀的开源代码需要掌握设计模式,这可以帮助程序员更好地理解和分析代码,提高代码的质量和可维护性。请在评论区和我一起讨论吧。原创 2024-02-20 16:17:04 · 937 阅读 · 1 评论 -
设计模式之单例模式的实现形式、弊端以及可替代的解决方案。
1. 饿汉式:在类加载期间,就已经将 instance 静态实例初始化好了,所以 instance 实例的创建是线程安全的。这种实现方式通过 JAVA 枚举类型本身的特性,保证了实例创建的线程安全性也实例的唯一性。这种实现方式,既支持延迟加载,也支持高并发,实现起来也比双重检测简单。3. Spring 的 IOC 容器:提供依赖注入,实现类的全局唯一性,同时支持参数化的构造函数,从根本上解决了单例模式的问题。2. 工厂模式:通过工厂类创建实例,支持参数化的构造函数,解决了单例模式的部分弊端。原创 2023-07-18 10:12:17 · 438 阅读 · 2 评论 -
给你分享,我是如何开发的Excel差异对比工具?
通过 drop_duplicates() 函数,我消除了重复值,最后使用 pandas 的 to_excel() 方法将结果写入一个新的 Excel 文件,从而实现了 Excel 差异对比功能。此外,我还添加了一个 label 标签来显示文件路径,以及一个提交按钮,点击后可跳转到差异对比页面。对于按钮部分,我生成了一个按钮列用于执行差异对比,以及一个全量执行按钮,以便用户选择单个 sheet 对比或全量对比。上周,领导给我分配了一个新任务,要求我开发一个 Excel 对比桌面工具。原创 2023-07-15 16:59:46 · 620 阅读 · 0 评论 -
四、程序员如何高质量重构代码?
大规模重构是对顶层代码设计的重构,包括系统、模块、代码结构、类与类之间的关系等重构,主要手段有分层、模块化、解耦、抽象可复用性组件等。为了保证重构代码不出错,需要熟练掌握各种设计原则、思想、模式,并对重构的业务和代码有足够的了解。重构代码是程序员必备的技能之一,需要有系统的全局认识,包括为什么要重构、重构什么、如何重构等方面。在进行大规模重构前,应制定重构计划,并根据计划逐步完成重构,每个阶段完成一小部分的重构,然后执行单元测试、提交代码,再进行下一阶段的重构,以确保代码一直处于正确、可运行状态。原创 2023-07-13 09:39:51 · 410 阅读 · 1 评论 -
普通人怎么实现财务自由?
其次,要增加总资产。主业是主体的收入,而副业则是主业之外的能够带来收入的事情,应该根据自己的兴趣爱好,在主业的基础上开拓副业,并打造可以无限次复制、无限次销售的产品,例如短视频、写文章、出书等。如果你每个月的日常花销是3000元,一年就是3.6万,而如果总资产年化收益率达到10%,只需要36万就能够实现财务自由,希望以上方法能够为你助力,实现真正的财务自由。最后,提高资产收益率,钱生钱的速度是关键,存银行的利息非常低,可以考虑投资其他高收益的项目,比如股票、基金等,提高总资产收益率,最终实现财务自由。原创 2023-07-12 01:12:35 · 439 阅读 · 0 评论 -
三、1如何运用设计原则之SOLID原则写出高质量代码?
对输入,输出,异常的约定;也就是添加一个新的功能时,应该在已有的代码基础是扩展新的模块,类,方法等,而不是修改已有代码(模块,类,方法等),所以说代码的扩展性是重点。是一种编程技巧,不通过new()的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数,构造参数等方式传递(或注入)给类使用,这样提高了代码的扩展性。我们通过依赖注入框架提供的扩展点,简单配置所需要的类,以及类与类之间依赖关系,就可以实现由框架来自动创建对象,管理对象是生命周期,依赖注入等原本需要程序员来做的事情。原创 2023-07-03 19:13:53 · 339 阅读 · 0 评论 -
二、2面向对象比面向过程编程有什么优势?
面向过程编程也是一种编程风格,它以过程(可以理解为方法,函数,操作)作为组织代码的基本单元,以数据(可以理解为成员变量,属性)与方法相分离为主要特点。优势1:oop更加能够应对大规模复杂程序的开发开发,能够清晰的,模块化的组织代码。比如我们开发一个电商交易系统,业务逻辑复杂,代码量很大,可能要定义好数百个函数,数百个数据结构,那如何分门别类这些函数和数据结构,才能不至于看起来比较凌乱呢?因为oop具有更加丰富的特性(封装,抽象,继承,多态),利用这些特性编写出来的代码,更加易扩展,易复用,易维护。原创 2023-07-02 22:41:44 · 365 阅读 · 0 评论 -
二、1什么是面向对象编程?
多态可以提高代码的扩展性和复用性,是很多设计模式,设计原则,编程技巧的代码实现基础。表示类之间的is-a关系,分为两种模式:单继承和多继承,单继承表示一个子类只能继承一个父类,多继承表示一个子类可以继承多个父类。主要是如何隐藏方法的具体实现,让使用者只关心方法提供了哪些功能,抽象通过接口类和抽象类来实现,比如JAVA的interface和abstract关键字语法。它以类或对象作为组织代码的基本单元,并将封装,抽象,继承,多态四个特性,作为代码设计的实现基石。二仅暴露有限的必要接口,提高类的易用性。原创 2023-07-01 11:50:01 · 220 阅读 · 0 评论 -
一、什么是高质量代码?
指的是当我们要实现一个新功能时,发现现有的代码已经抽象出了很多底层可以复用的模块,类代码,我们可以直接拿来用,说明代码写得很灵活。我觉得应该有7个特征,分别是:可维护性,可读性,可扩展性,灵活性,简洁性,可复用性和可测试性,接下来容我一一介绍。比如,命名不规范,代码结构混乱,高度耦合等。指的是我们添加性功能时,尽量不修改或者少改原有的代码的情况下,直接在扩展点插入新的功能代码。指的是尽量复用已有的代码,减少重复代码的编写,比如面向对象的继承,多态特性。指的是代码简洁,易懂,逻辑清晰,意味着易度,已维护。原创 2023-06-30 13:01:23 · 331 阅读 · 0 评论 -
设计原则之迪米特法则(LOD)
它还有个更加达意的名字,叫作最小知识原则,英文全称:The Least Knowledg Principle。通俗的讲是:不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。“高内聚”用来指导类本身的设计,“松耦合”用来指导类与类之间依赖关系的设计;指相近功能应该放在同一个类,不相近的功能不要放在同一个类中。因为相近的功能往往会被同时修改,放在同一个类中方便维护。指的是类与类之间的依赖关系简单清晰。即使两个类有依赖关系,一个类的代码改动不会或者很少依赖类的代码改动。原创 2023-06-29 15:10:02 · 212 阅读 · 0 评论 -
设计原则之DRY原则
代码的“可复用性”是从代码开发者的角度来讲的,“复用”是从代码使用者的角度来讲的。比如,A同事编写一个UrlUtil类,代码的“可复用性”很好,B同事在开发新功能时,可以直接“复用”。这三者理解上有所区别,但实际要达到的目的是类似的,都是为了减少代码量,提高代码的可读性,可维护性。1、代码复用性表示一段代码可被复用的特性或能力:我们在编写代码的时候,让代码尽可能复用;2、代码复用表示一种行为:我们在开发新功能的时候,尽量复用已存在的代码;2、实现逻辑不重复,但功能语义重复的代码,也算违反DRY原则。原创 2023-06-29 12:38:42 · 259 阅读 · 0 评论 -
设计原则之KISS原则和YAGNI原则
代码行数越少并不代表越简单,我们还要考虑逻辑复杂度,实现难度,代码的可读性等。而且本事就复杂的问题,用复杂的方法解决,并不违背KISS原则。我们都知道代码的可读性和维护性是衡量代码质量非常重要的两个标准。KISS原则的英文全称:Keep It Simple and Stupid。她的意思的:不要过度设计当前用不到的代码,功能。如果说YAGNI原则讲的是要不要做,那么KISS原则讲的是怎么做。第二个问题是:代码复杂就违背了KISS原则吗?第一个问题是:行数少就越“简单吗”?如何写出满足KISS原则的代码呢?原创 2023-06-29 09:48:23 · 238 阅读 · 1 评论 -
如何写出高质量代码
当我们要实现一个新功能时,发现现有的代码已经抽象出了很多底层可以复用的模块,类代码,我们可以直接拿来用,说明代码写得很灵活。3设计原则中单一职责,DRY基于接口而非实现,里式替换原则,可以让我们写出可复用性,灵活,易扩展,易维护的代码;代码的可扩展性指的是我们添加性功能时,尽量不修改或者少改原有的代码的情况下,直接在扩展点插入新的功能代码。顾名思义指的是尽量复用已有的代码,减少重复代码的编写,比如面向对象的继承,多态特性。代码简洁性,包含代码简单易懂,逻辑清晰,意味着易度,已维护。,接下来容我一一介绍。原创 2023-06-19 02:02:04 · 1245 阅读 · 2 评论 -
微信第三方登陆
请求参数:@NotBlank(message = "openid不能为空")private String openid; private String devicesn; //qq,wei_xin@NotBlank(message = "登录类型不能为空")private String loginType; @NotBlank(message = "access_token...原创 2018-12-01 16:00:43 · 338 阅读 · 0 评论 -
app登陆流程
请求参数:@NotBlank(message="手机号不能为空")private String mobile; //@NotBlank(message="机器码不能为空")private String devicesn; @NotBlank(message="密码不能为空")private String pwd;1 通过手机号查询用户信息:if(查到用户为空 || 密码...原创 2018-12-01 15:19:57 · 1398 阅读 · 0 评论