- 博客(18)
- 收藏
- 关注
原创 设计模式(07)——设计原则(2)
在上一篇文章中,我们已经介绍了 单一职责原则,开闭原则,里氏替换原则,接口隔离原则,依赖翻转原则。上面说的这5种比较常见,下面就让我们再介绍一些不常见的,但这些原则在指导代码设计中,也十分的重要。KISS原则**Keep It Simple and Stupid,**这个原则听起来比较简单,重点是理解什么样的代码是简单的,代码行数少就是简单的代码吗???还是说当程序的逻辑十分复杂不容易理解时就是一个复杂的代码呢???下面就让我们来看看怎么样判断简单。代码行数代码就不展示了,其实懂的都懂,代码行
2020-12-05 15:32:59
154
原创 设计模式(06)——设计原则(1)
设计原则设计原则,是设计模式的内功心法,基本所有的设计模式都是基于设计原则进行的具体化,如果说设计模式是如何操作的话,那么设计原则就是为何这么做的基石,因此,只要我们能充分理解设计原则,那么在此基础上,对设计模式就能更好的理解,甚至能自己设计出一种设计模式来。单一职责原则定义一个类或模块,只需要完成一个范围的功能,而不要搞得大而全。场景例如我们设计一个社交网站,现在要存储用户信息,类设计如下:public class UserInfo { private String name;
2020-12-01 16:58:12
129
原创 使用Feign发送HTTP请求
使用Feign发送HTTP请求在往常的 HTTP 调用中,一直都是使用的官方提供的 RestTemplate 来进行远程调用,该调用方式将组装代码冗余到正常业务代码中,不够优雅,因此在接触到 Feign 后,考虑使其作为一个 HTTP 发送基础,来进行远程调用。下面就让我们来看一下,其是如何使用的。引入依赖首先,我们需要将 Feign 的基础依赖引入项目,因为我们只使用 Feign 的 remote 功能,因此,只引入基础依赖。此外在项目中,我们还自定义了了 JSON 转换和 log 设置,因此
2020-11-23 11:25:09
2547
原创 设计模式(05)——组合和继承
组合和继承继承带来的问题在 《面向对象以及特性分析》文章,我们可以看到继承带来的问题:菱形问题;继承层次过深过复杂。如上图所示,因为每个鸟根据特性会有会飞或者不会飞的特性,也会有会叫不会叫的特性等等,如果根据这些特性来设计类,然后让对应的终点类来继承的话,那么则会造成类的膨胀,从而代码变得十分的复杂。组合的优势针对上述继承所带来的问题,我们可以通过组合、委托、接口 3个技术手段,来进行另一种层面上的实现,具体代码如下。// ===========================
2020-11-11 14:59:38
234
原创 设计模式(04):接口和抽象类
接口和抽象类区别接口是对行为的抽象,其重点关注的是要有该行为。抽象类是对一些共性行为的聚合,将多个子类都有的具体行为抽象成一个方法,形成复用。public abstract class Bird { private String name; private BigDecimal weight; private String habit;}public interface IFlyable { /** * a bird that can fly
2020-11-04 15:35:53
159
2
原创 设计模式(三):面向对象与面向过程的区别和联系
面向对象与面向过程在前面我们讲述了面向对象的概念,在这里我们再分析一些另一种编程范式:面向过程。面向过程和面向过程语言针对面向对象的概念解释,这里,我们用相同的方式来对面向过程进行解释:面向过程是一种编程范式,其重点是将函数作为代码组织的基本单元,其将数据和方法相分离,通过函数的顺序执行来完成任务;面向过程语言对应的就是不支持类和对象的定义,也不支持面向对象的一些特性,如封装、多态等。优劣从上面的定义看出,面向过程的优劣势如下所示:在流程比较复杂的时候,面向过程会变得吃力,因为
2020-11-01 14:56:02
631
原创 设计模式(二):面向对象以及特性分析
面向对象根据大纲,首先我们来学习一种代码设计与编写的风格,即面向对象。面向对象编程和面向对象编程语言面向对象编程是一种编程范式,通俗来说,就是将 代码的组织单元改成类和对象,并将 **封装、继承、抽象、多态 **作为代码设计和编写的基石。面向对象编程语言代表了能简易实现面向对象编程范式的语言,其如果能够用现成的语法机制来实现范式,就是面向对象编程语言。从上述的定义中,我们可以看出,面向对象编程不一定非要用面向对象编程语言来实现,同时,当我们使用面向对象编程语言来编写代码时,可能写出来的却
2020-10-22 09:32:09
339
4
原创 设计模式(一):学习大纲
设计模式(一):学习大纲该系列文章,是在学习网上课程时的学习总结,可能会有一些瑕疵和错误,看到的可以留言反馈,谢谢~学习意义重要性的看法设计模式老生常谈了,对程序员的后续发展是很重要的,可以有效提升代码的可读性,具体来看,有如下用途:应对面试,面试里面装高手;装杯,写出来的代码别人看到了只能说牛皮;复杂逻辑的结构用设计模式的思想来实现代码,才能实现的好;源码、框架里面很多设计模式思想,不懂就看不懂了;一切为了职场未来更好的装杯。大纲面向对象四大特性:继承、封装、多态
2020-10-17 14:44:59
122
原创 Java8日期时间——LocalDateTime的使用以及相互转换
日期时间处理Java8内每个类含义在 Java8 之前操作时间,用的都是 Date 和 Calendar 类,但这两个类,操作起来及其繁琐,且在时间转换、时区转换的时候也很麻烦,因此 JDK 官方在 8 之后,引入了 LocalDateTime 以及相关类,通过新的类来定义和操作时间,也十分的简单清晰,下面我们就来我看一下如何操作。Instant: 时间戳Duration: 持续时间, 时间差LocalDate: 只包含⽇期, ⽐如: 2016-10-20LocalTime: 只包含时间, ⽐
2020-09-30 11:20:37
898
原创 Git-使用Rebase合并分支
commit 合并在开发过程中,可能会出现多个 commit 所涉及的逻辑都是同一个功能模块,此时,会导致 log tree 非常的混乱,不美观,因此,我们可以将多个 commit 进行合并,变成一条,这样,也使得 log tree 会更加的简洁。首先,先确定的是,我们合并 commit 使用的是 rebase 命令。command line首先,找到要操作的 commit 的 前一条的 sha1,然后执行git rebase -i sha1执行完后,会出现指定 commit 后所有的 co
2020-09-28 10:47:13
1147
原创 Spring AOP——用代理代替繁琐逻辑
Spring AOP基础概念AOP 是一种面向切面的编程思想,通俗来讲,这里假如我们有多个方法。@Componentpublic class Demo { public void say1() { System.out.println("say1~~~~~~~"); } public void say2() { System.out.println("say2~~~~~~~"); } public void
2020-09-14 16:17:13
180
原创 Spring Validation——用注解代替代码参数校验
Spring Validation概念在原先的编码中,我们如果要验证前端传递的参数,一般是在接受到传递过来的参数后,手动在代码中做 if-else 判断,这种编码方式会带来大量冗余代码,十分的不优雅。因此,推出了用注解的方式,来代替手动判断的方式,让编码更加的简洁。使用方式引入注解:一般在 <dependency> <groupId>org.springframework.boot</groupId>
2020-09-02 14:03:18
712
原创 Netty学习(4):NIO网络编程
概述在 Netty学习(3)中,我们已经学习了 Buffer 和 Channel 的概念, 接下来就让我们通过实现一个 NIO 的多人聊天服务器来深入理解 NIO 的第 3个组件:Selector。目的在本文中,我们将通过实现一个网络聊天室程序,来掌握 Selector 的概念以及如何使用 NIO 来完成网络编程。需求服务器端可以检测用户上线、离线,并告知其他用户;将一个客户端的...
2020-03-11 09:44:50
109
原创 Netty学习(3):文件操作
概述在 Netty学习(2)中,我们先浅浅认识了 NIO 的3大核心组件,现在就让我们针对其深入学习,通过一些简单的文件操作来深入理解其中的 Buffer 和 Channel 的概念。文件写入将内存中的数据写入到文件中,如果文件不存在,那么就新建文件。// 数据 -> 文件 private static void dataToFile(String data, String ...
2020-03-02 11:20:29
268
原创 Netty学习(2):IO模型之NIO初探
NIO 概述前面说到 BIO 有着创建线程多,阻塞 CPU 等问题,因此为解决 BIO 的问题,NIO 作为同步非阻塞 IO模型,随 JDK1.4 而出生了。在前面我们反复说过4个概念:同步、异步、阻塞、非阻塞。因此,我们就首先用最简单的语言说一下他们的区别,这里,我们心里暂时有个概念即可,在后面的学习过程中,还会对其进行深入的探讨学习。概念对比首先,我们先要确立一个概念,就是一个IO操作...
2020-02-20 14:55:35
95
原创 Netty学习(1):IO模型之BIO
概述Netty其实就是一个异步的、基于事件驱动的框架,其作用是用来开发高性能、高可靠的IO程序。因此下面就让我们从Java的IO模型来逐步深入学习Netty。IO模型IO模型简单来说,就是采用如何的方式来进行数据的接受和发送,因为存在着发送方和接收方两个角色,因此IO模型一般分为以下3类:BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)。其3者的区别如下:BIO:是最传统...
2020-02-13 09:17:28
106
原创 Java :面向对象
Java :面向对象直面Java 第001期什么是面向过程面向过程是以函数为中心,要解决一个问题,需要把问题分解为一个个的步骤,然后定义一系列的流程,用特定的输入经过函数的处理,最终输出特定的结果。什么是面向对象面向对象是对象为中心,对每一个步骤抽象形成对象,在对象中封装好需要解决问题的方法,强调了代码的复用。两者的区分比如说现在要实现一个开车的功能。对于面向过...
2018-12-09 03:06:02
100
原创 Ajax 跨域解决(一)——SpringBoot学习
什么是跨域在目前的前后端分离开发模式下,前端使用 Ajax 访问后端提供的接口获取数据,产生报错。 跨域发生的原因1. 浏览器的限制2. 发生跨域访问3. 发送的是 XHR(XMLHttpRequst) 请求三者同时发生,就会发生跨域问题 解决方式因为是三者同时发生,才能发生跨域问题,因此针对三者,处理其中的一个即可。 首先是浏览器的限制,需要指定参...
2018-11-12 22:47:16
163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人