Spring核心原理之IoC容器初体验(2)

2021-12-24
阅读 10 分钟
1.1k
IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来帮忙实现。我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象与对象的关系。这个描述最具体的表现就是我们所看到的配置文件。

花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘

2021-11-26
阅读 14 分钟
1.7k
Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。他们首次给我们总结出一套软件开发...

雇工模式(Employee Pattern)

2021-11-25
阅读 2 分钟
1.5k
雇工模式(Employee Pattern)也叫作仆人模式(Servant Pattern),属于行为型设计模式,它为一组类提供通用的功能,而不需要类实现这些功能,也是命令模式的一种扩展。

空对象模式(Null Object Pattern)

2021-11-25
阅读 3 分钟
2.2k
空对象模式(Null Object Pattern)不属于GoF设计模式,但是它作为一种经常出现的模式足以被视为设计模式了。其具体定义为设计一个空对象取代NULL对象实例的检查。NULL对象不是检查控制,而是反映一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为,属于行为型设计模式。

规格模式(Specification Pattern)

2021-11-25
阅读 4 分钟
2k
规格模式(Specification Pattern)可以认为是组合模式的一种扩展。很多时候程序中的某些条件决定了业务逻辑,这些条件就可以抽离出来以某种关系(与、或、非)进行组合,从而灵活地对业务逻辑进行定制。另外,在查询、过滤等应用场合中,通过预定义多个条件,然后使用这些条件的组合来处理查询或过滤,而不是使用逻辑判...

对象池模式(Object Pool Pattern)

2021-11-25
阅读 3 分钟
2k
对象池模式(Object Pool Pattern),是创建型设计模式的一种,将对象预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少频繁创建对象所占用的内存空间和初始化时间。一个对象池包含一组已经初始化并且可以使用的对象,可以在有需求时创建和销毁对象。对象池的用户可以从池子中取得对象,对...

彻底搞懂访问者模式的静态、动态和伪动态分派

2021-11-24
阅读 10 分钟
1.3k
每到年底,管理层就要开始评定员工一年的工作绩效,员工分为工程师和经理;管理层有CEO和CTO。那么CTO关注工程师的代码量、经理的新产品数量;CEO关注工程师的KPI、经理的KPI及新产品数量。由于CEO和CTO对于不同的员工的关注点是不一样的,这就需要对不同的员工类型进行不同的处理。此时,访问者模式可以派上用场了,来...

微信和QQ这么多群,该如何管理好友关系?

2021-11-24
阅读 4 分钟
1.6k
在现实生活中,中介者的存在是不可缺少的,如果没有了中介者,我们就不能与远方的朋友进行交流。各个同事对象将会相互进行引用,如果每个对象都与多个对象进行交互,则会形成如下图所示的网状结构。

100行代码,轻松搞定文本编辑器中草稿箱

2021-11-23
阅读 6 分钟
1.6k
大家都用过网页中的富文本编辑器,编辑器通常都会附带草稿箱、撤销等操作。下面用一段代码来实现一个这样的功能。假设,我们在GPer社区中发布一篇文章,文章编辑的过程需要花很长时间,中间也会不停地撤销、修改,甚至可能要花好几天才能写出一篇精品文章,因此可能会将已经编辑好的内容实时保存到草稿箱。首先创建发起...

使用命令模式重构播放器控制条

2021-11-22
阅读 3 分钟
1.1k
假如我们开发一个播放器,播放器有播放功能、拖动进度条功能、停止播放功能、暂停功能,我们在操作播放器的时候并不是直接调用播放器的方法,而是通过一个控制条去传达指令给播放器内核,具体传达什么指令,会被封装为一个个按钮。那么每个按钮就相当于对一条命令的封装。用控制条实现了用户发送指令与播放器内核接收指...

这个无敌设计,可以解析并运算任意数学表达式

2021-11-18
阅读 10 分钟
2.2k
下面用解释器模式来实现一个数学表达式计算器,包含加、减、乘、除运算。首先定义抽象表达式角色IArithmeticInterpreter接口。

基于Guava API实现异步通知和事件回调

2021-11-17
阅读 8 分钟
1.6k
当小伙伴们在社区提问时,如果有设置指定用户回答,则对应的用户就会收到邮件通知,这就是观察者模式的一种应用场景。有些小伙伴可能会想到MQ、异步队列等,其实JDK本身就提供这样的API。我们用代码来还原这样一个应用场景,首先创建GPer类。

彻底搞懂Spring状态机原理,实现订单与物流解耦

2021-11-16
阅读 10 分钟
4.8k
当我们在社区阅读文章时,如果觉得文章写得很好,我们就会评论、收藏两连发。如果处于登录情况下,则可以直接做评论、收藏这些行为。否则,跳转到登录界面,登录后再继续执行先前的动作。这里涉及的状态有两种:登录与未登录;行为有两种:评论和收藏。下面使用状态模式来实现这个逻辑,代码如下。首先创建抽象状态角色U...

手写自定义迭代器,秒懂迭代器底层原理

2021-11-15
阅读 5 分钟
2k
总体来说,迭代器模式是非常简单的。还是以网络课程为例,我们创建一个课程集合,集合中的每一个元素都是课程对象,然后手写一个迭代器,将每一个课程对象的信息都读出来。首先创建集合元素课程Course类。

意外发现,原来你不知道自己每天都在用门面模式

2021-11-13
阅读 7 分钟
1.2k
一般的电商平台都是整合众多的子系统聚合到一起形成一个大型的购物平台,一般情况下,有很多现成的功能都不是重新开发的,而是要去对接已有的各个子系统,这些子系统可能涉及积分系统、支付系统、物流系统的接口调用。如果所有的接口调用全部由前端发送网络请求去调用现有接口,一则会增加前端开发人员的难度,二则会增...

万字长文手写数据库连接池,让抽象工厂不再抽象

2021-11-12
阅读 13 分钟
1.3k
上图中有正方形、圆形和菱形3种图形,相同颜色、相同深浅的代表同一个产品族,相同形状的代表同一个产品等级结构。同样可以从生活中来举例,比如,美的电器生产多种家用电器,那么上图中,颜色最深的正方形就代表美的洗衣机,颜色最深的圆形代表美的空调,颜色最深的菱形代表美的热水器,颜色最深的一排都属于美的品牌,...

全面通透深入剖析工厂方法模式

2021-11-11
阅读 4 分钟
1.5k
本文节选自《设计模式就该这样学》1 工厂方法模式的应用场景工厂方法模式主要适用于以下应用场景。(1)创建对象需要大量重复的代码。(2)客户端(应用层)不依赖产品类实例如何被创建、实现等细节。(3)一个类通过其子类来指定创建哪个对象。2 工厂方法模式的UML类图工厂方法模式的UML类图如下图所示。由上图可以看到...

彻底说透简单工厂那些你没有关注过的细节

2021-11-10
阅读 4 分钟
1.2k
接下来看代码,还是以创建一门网络课程为例。假设有Java架构、大数据、人工智能等课程,已经形成了一个生态。我们可以定义一个课程标准ICourse接口。

你以为委派模式很神秘,其实你每天都在用

2021-11-09
阅读 7 分钟
1.2k
本文节选自《设计模式就该这样学》1 使用委派模式模拟任务分配场景我们用代码来模拟老板给员工分配任务的业务场景。首先创建IEmployee员工接口。 {代码...} 创建员工EmployeeA类。 {代码...} 创建员工EmployeeB类。 {代码...} 创建项目经理Leader类。 {代码...} 然后创建Boss类下达命令。 {代码...} 最后编写客户端测试...

使用桥接模式设计复杂的消息系统

2021-11-08
阅读 3 分钟
1.3k
举个例子,我们在平时办公的时候经常通过邮件消息、短信消息或者系统内消息与同事进行沟通。尤其在走一些审批流程的时候,我们需要记录这些过程以备查。根据类型来划分,消息可以分为邮件消息、短信消息和系统内消息。但是,根据紧急程度来划分,消息可以分为普通消息、加急消息和特急消息。显然,整个消息系统可以划分...

搞懂钩子方法和模板方法,看完这篇就够了

2021-11-07
阅读 6 分钟
5.3k
通常的模板方法模式中会设计一个abstract的抽象方法,交给它的子类实现,这个方法称为模板方法。而钩子方法,是对于抽象方法或者接口中定义的方法的一个空实现,也是模板方法模式的一种实现方式。

使用策略模式重构电商折扣和支付场景

2021-11-05
阅读 7 分钟
1.7k
大家都知道,咕泡学院的架构师课程经常会有优惠活动,优惠策略有很多种可能,如领取优惠券抵扣、返现促销、拼团优惠等。下面用代码来模拟,首先创建一个促销策略的抽象PromotionStrategy。

没有性能瓶颈的无限级菜单树应该这样设计

2021-11-04
阅读 7 分钟
1.2k
以一门网络课程为例,我们设计一个课程的关系结构。比如,我们有Java入门课程、人工智能课程、Java设计模式、源码分析、软技能等,而Java设计模式、源码分析、软技能又属于Java架构师系列课程包,每个课程的定价都不一样。但是,这些课程不论怎么组合,都有一些共性,而且是整体和部分的关系,可以用组合模式来设计。首...

如何快速搞定第三方登录且易扩展?

2021-11-03
阅读 6 分钟
1.7k
我们使用适配模式来实现一个实际的业务场景,解决实际问题。年纪稍微大一点的小伙伴一定经历过这样的过程。很早以前开发的老系统应该都有登录接口,但是随着业务的发展和社会的进步,单纯地依赖用户名密码登录显然不能满足用户需求。现在,大部分系统都已经支持多种登录方式,如QQ登录、微信登录、手机登录、微博登录等...

一文读懂深克隆与浅克隆的关系

2021-11-02
阅读 5 分钟
1.2k
在Java提供的API中,不需要手动创建抽象原型接口,因为Java已经内置了Cloneable抽象原型接口,自定义的类型只需实现该接口并重写Object.clone()方法即可完成本类的复制。通过查看JDK的源码可以发现,其实Cloneable是一个空接口。Java之所以提供Cloneable接口,只是为了在运行时通知Java虚拟机可以安全地在该类上使用clon...

就因为把int改成Integer,第2天被辞了

2021-11-01
阅读 6 分钟
1.2k
一个程序员就因为改了生产环境上的一个方法参数,把int型改成了Integer类型,因为涉及到钱,结果上线之后公司损失惨重,程序员被辞退了。信不信继续往下看。先来看一段代码:

趣谈装饰器模式,让你一辈子不会忘

2021-11-01
阅读 6 分钟
1.1k
来看这样一个场景,上班族大多有睡懒觉的习惯,每天早上上班都时间很紧张,于是很多人为了多睡一会儿,就用更方便的方式解决早餐问题,有些人早餐可能会吃煎饼。煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么加码,都还是一个煎饼。再比如,给蛋糕加上一些水果,给房子装修,都是装饰器模式。

为什么一定要学习设计模式

2021-10-30
阅读 15 分钟
1.4k
先来看一个生活案例,当我们开心时,也许会寻求享乐。在学习设计模式之前,你可能会这样感叹:学完设计模式之后,你可能会这样感叹:大家对比一下前后的区别,有何感受?回到代码中,我们来思考一下,设计模式能解决哪些问题?1 写出优雅的代码先来看一段我很多年前写的代码。 {代码...} 优化之后的代码如下。 {代码...}...

1个月连载30个设计模式真实案例(附源码),挑战年薪60W不是梦

2021-10-29
阅读 7 分钟
5k
Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。他们首次给我们总结出一套软件开发...

用建造者模式实现一个防SQL注入的ORM框架

2021-10-28
阅读 16 分钟
1.3k
以构建一门课程为例,一个完整的课程由PPT课件、回放视频、课堂笔记、课后作业组成,但是这些内容的设置顺序可以随意调整,我们用建造者模式来代入理解一下。首先创建一个产品类Course。