随笔分类 -  Java

摘要:上一节课,我们通过棋牌游戏和文本编辑器这样两个实际的例子,学习了享元模式的原理、实现以及应用场景。用一句话总结一下,享元模式中的“享元”指被共享的单元。享元模式通过复用对象,以达到节省内存的目的。 享元模式在 Java Integer 中的应用 我们先来看下面这样一段代码。你可以先思考下,这段代码会 阅读全文
posted @ 2021-06-21 15:11 hochan_100 阅读(47) 评论(0) 推荐(0)
摘要:上一节课中,我们讲了组合模式。组合模式并不常用,主要用在数据能表示成树形结构、能通过树的遍历算法来解决的场景中。今天,我们再来学习一个不那么常用的模式,享元模式(Flyweight Design Pattern)。这也是我们要学习的最后一个结构型模式。 享元模式原理与实现 所谓“享元”,顾名思义就是 阅读全文
posted @ 2021-06-21 15:00 hochan_100 阅读(63) 评论(0) 推荐(0)
摘要:结构型设计模式就快要讲完了,还剩下两个不那么常用的:组合模式和享元模式。今天,我们来讲一下组合模式(Composite Design Pattern)。 组合模式跟我们之前讲的面向对象设计中的“组合关系(通过组合来组装两个类)”,完全是两码事。 这里讲的“组合模式”,主要是用来处理树形结构数据。这里 阅读全文
posted @ 2021-06-21 14:00 hochan_100 阅读(181) 评论(0) 推荐(0)
摘要:工作中优化时常用的一些命令,死记肯定是记不住的,通常记在小本本上,用到的时候,复制粘贴出来查看 作者:沉默的反补 https://www.bilibili.com/read/cv6295754 出处:bilibili jmap(堆内存分析) 一定要注意,触发Full GC和不触发Full GC的情况 阅读全文
posted @ 2021-06-20 15:36 hochan_100 阅读(27) 评论(0) 推荐(0)
摘要:前面我们已经学习了代理模式、桥接模式、装饰器模式、适配器模式,这 4 种结构型设计模式。今天,我们再来学习一种新的结构型模式:门面模式。门面模式原理和实现都特别简单,应用场景也比较明确,主要在接口设计方面使用。 如果你平时的工作涉及接口开发,不知道你有没有遇到关于接口粒度的问题呢? 为了保证接口的可 阅读全文
posted @ 2021-06-18 17:43 hochan_100 阅读(131) 评论(0) 推荐(0)
摘要:今天,我们再来学习一个比较常用的结构型模式:适配器模式。这个模式相对来说还是比较简单、好理解的,应用场景也很具体,总体上来讲比较好掌握。 关于适配器模式,今天我们主要学习它的两种实现方式,类适配器和对象适配器,以及 5 种常见的应用场景。同时,我还会通过剖析 slf4j 日志框架,来给你展示这个模式 阅读全文
posted @ 2021-06-18 17:07 hochan_100 阅读(216) 评论(0) 推荐(0)
摘要:上一节说到了桥接模式,桥接模式有两种理解方式。第一种理解方式是“将抽象和实现解耦,让它们能独立开发”。这种理解方式比较特别,应用场景也不多。另一种理解方式更加简单,类似“组合优于继承”设计原则,这种理解方式更加通用,应用场景比较多。不管是哪种理解方式,它们的代码结构都是相同的,都是一种类之间的组合关 阅读全文
posted @ 2021-06-18 15:14 hochan_100 阅读(130) 评论(0) 推荐(0)
摘要:上次我们学习了第一种结构型模式:代理模式。它在不改变原始类(或者叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。代理模式在平时的开发经常被用到,常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。 我们再学习另外一种结构型模式:桥接模式。桥接模式的代码实 阅读全文
posted @ 2021-06-18 14:03 hochan_100 阅读(69) 评论(0) 推荐(0)
摘要:作为 Spring 的关键功能支撑,Spring 事件是一个相对独立的点。或许你从没有在自己的项目中使用过 Spring 事件,但是你一定见过它的相关日志。而且在未来的编程实践中,你会发现,一旦你用上了 Spring 事件,往往完成的都是一些有趣的、强大的功能,例如动态配置。 案例 1:试图处理并不 阅读全文
posted @ 2021-06-18 10:45 hochan_100 阅读(289) 评论(0) 推荐(0)
摘要:创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。 其中,单例模式用来创建全局唯一的对象。工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制 阅读全文
posted @ 2021-06-17 18:18 hochan_100 阅读(78) 评论(0) 推荐(0)
摘要:当一个系统采用的切面越来越多时,因为执行顺序而导致的问题便会逐步暴露出来 1:错乱混合不同类型的增强 还是沿用上节课的宿舍管理系统开发场景。 这里我们先回顾下,你就不用去翻代码了。这个宿舍管理系统保护了一个电费充值模块,它包含了一个负责电费充值的类 ElectricService,还有一个充电方法 阅读全文
posted @ 2021-06-17 16:45 hochan_100 阅读(67) 评论(0) 推荐(0)
摘要:对于熟悉 JavaScript 语言的前端程序员来说,原型模式是一种比较常用的开发模式。这是因为,有别于 Java、C++ 等基于类的面向对象编程语言,JavaScript 是一种基于原型的面向对象编程语言。即便 JavaScript 现在也引入了类的概念,但它也只是基于原型的语法糖而已。不过,如果 阅读全文
posted @ 2021-06-17 12:22 hochan_100 阅读(55) 评论(0) 推荐(0)
摘要:上次聊了工厂模式,另外一个比较常用的创建型设计模式,Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。 实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。比如,你有没有考虑过这样几个问题:直接使用构造函数或者配合 set 方法就能创建对象,为 阅读全文
posted @ 2021-06-17 10:24 hochan_100 阅读(89) 评论(0) 推荐(0)
摘要:案例 1:构造器内抛空指针异常 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public clas 阅读全文
posted @ 2021-06-16 16:16 hochan_100 阅读(112) 评论(0) 推荐(0)
摘要:当创建对象是一个“大工程”的时候,我们一般会选择使用工厂模式,来封装对象复杂的创建过程,将对象的创建和使用分离,让代码更加清晰. 那何为“大工程”呢?一种是创建过程涉及复杂的 if-else 分支判断,另一种是对象创建需要组装多个其他类对象或者需要复杂的初始化过程。 工厂模式和 DI 容器有何区别? 阅读全文
posted @ 2021-06-16 15:02 hochan_100 阅读(32) 评论(0) 推荐(0)
摘要:除了单例模式,还有另外一个比较常用的创建型模式:工厂模式 一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见。 阅读全文
posted @ 2021-06-16 09:37 hochan_100 阅读(95) 评论(0) 推荐(0)
摘要:package com.company.bsearch.jdk8; /** * @author huoziyang * @version 1.0 * @date 2021/6/15 10:47 */ public class User { private int id; private String 阅读全文
posted @ 2021-06-15 15:59 hochan_100 阅读(45) 评论(0) 推荐(0)
摘要:1:@Value 没有注入预期的值 在装配对象成员属性时,我们常常会使用 @Autowired 来装配。但是,有时候我们也使用 @Value 进行装配。不过这两种注解使用风格不同,使用 @Autowired 一般都不会设置属性值,而 @Value 必须指定一个字符串值,因为其定义做了要求,定义代码如 阅读全文
posted @ 2021-06-15 15:57 hochan_100 阅读(108) 评论(0) 推荐(0)
摘要:Spring @Autowired 提及 Spring 的优势或特性,我们都会立马想起“控制反转、依赖注入”这八字真言。而 @Autowired 正是用来支持依赖注入的核心利器之一。表面上看,它仅仅是一个注解,在使用上不应该出错。但是,在实际使用中,我们仍然会出现各式各样的错误,而且都堪称经典。所以 阅读全文
posted @ 2021-06-15 15:10 hochan_100 阅读(159) 评论(0) 推荐(0)
摘要:案例 1:隐式扫描不到 Bean 的定义 Spring Boot 的默认扫描规则 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration 阅读全文
posted @ 2021-06-15 14:42 hochan_100 阅读(123) 评论(0) 推荐(0)