自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 设计模式之中介者Mediator——没有“任何”框架不用这个模式

中介模式的中文翻译非常形象。大家买房子要中介,中介做的什么事情呢?我们先不会回答这个问题。而是反问依据,如果没有中介,我们买房子的场景会是怎样?1. 满世界找有可能买房子的房东?可能同时要跟20个房东打交道,跟房东约时间可真是看天气、看运气的事情2. 房产交易要签合同?我们要跟房东拟定合同?还要一起房地产交易中心做网签备案3. 如果全款购房的话,还稍微简单点。如果钱不够想分期怎么办?购房者还要跟银行打交道,可能还不止一家银行,因为各家银行的放款条件,贷款额度、贷款利率和贷款期限可能有所不同其实上面所说的还可

2022-06-10 00:59:56 70

原创 设计模式-桥接模式Bridge Pattern:爱虽放手,牵挂不减

概念桥接模式(Bridge Pattern)是设计模式中最复杂的模式之一,它把事物对象和该对象的具体行为、具体特征分离开来,使它们可以独自进行变化和更改。这样的解释可能比较抽象和令人费解,读者可以通过下面的应用场景进一步来理解。应用场景我们还以绘制图形为例,比如我们要绘制矩形Rectangle、Circle、Triangle,我们需要至少需要定义3个形状类来表示,如果我们要绘制的图形还有不同的颜色,如Red、Yello、Green等,此时我们可能有一下两种设计方案:1. 为每个形状类都提供颜色的实现,比如通

2022-05-28 22:14:38 85

原创 外观设计模式Facade Pattern:我要面对全世界的复杂,只是为你简单

外观模式Facade Pattern,有时又译为门面模式,这是开发人员的经常运用的一种设计模式,在服务器端的开发我们通常都会采用一个MVC类型的框架的来辅助开发,比如Spring MVC、Struts2等。前端开发人员只需要关注服务端提供的接口,而无需进一步了解接口内部如何去做子系统之间的协调及调用。外观模式要解决的问题就是让客户端对各个子系统的调用变得简单。下图是《设计模式》上的一个的插图,Facade将众多复杂的子系统对Client屏蔽开来,Client只需要关注Facade提供的一个简单接口即可。外观

2022-05-28 21:59:57 96

原创 设计模式——装饰器Decorator和代理Proxy不是两兄弟

刚学习设计模式的时候,容易对装饰器模式和代理模式有所混淆,所以笔者特意将两者放在一起进行讲解,对比其相似性及区别。装饰器模式 Decorator Pattern我们最初接触装饰器模式,可能是在学习Java的IO相关操作的时候,下面一些类大家或多或少都使用过:- java.io.BufferedInputStream(InputStream)- java.io.DataInputStream(InputStream)- java.io.BufferedOutputStream(OutputStream)- j

2022-05-24 00:22:51 89

原创 Spring源码之——有BeanDefinition才有Bean

我们知道Spring的可用通过多种方式进行配置:XML配置文件、Groovy配置文件、注解配置、Java代码配置。无论什么样的形式的配置都要先被解析成初始化Bean所需要的各种元信息(Metadata),也就是BeanDefinition对象我们重点关注org.springframework.context.support.AbstractApplicationContext#refresh中调用的注释写的简单,告诉子类来刷新内部的beanFactory,返回被刷新的BeanFactory实例getBean

2022-05-21 12:45:15 120

原创 SOLID之单一职责原则:简约而不简单

SOLID是5个面向对象设计原则英文单词的缩写,旨在帮助软件设计变得可理解、可伸缩、可维护。在 Robert C. Martin(他是一位软件工程师,也是一位大学老师)2000年的文章《设计原则和设计模式中》,这5个原则首次被提出来。SOLID原则分别指:单一职责原则:有且只有一个引起变更的原因开闭原则:软件实体应该被设计为对扩展开放,对修改关闭里式替换原则:使用基类引用(或指针)的方法,应该无需关注基类的继承(派生)类,就能够使用。也可以参考面向契约的设计接口隔离(分割)原则:多个有明确职责的接口要由于一

2022-05-06 00:04:27 129 1

原创 设计模式私家笔记——概述:设计模式是银弹吗?

就好像软件世界中的经典语录——XXX不是银弹,设计模式同样可以套用一下——设计模式不是银弹。好的设计好代码包括对业务的准确表达,要兼顾未来(这个未来可长可短)的扩展性和维护性,要充分考虑成员的理解水平。所以就像上图表达的一样,哪怕我们用上了各种软件原则、各种设计模式,也未必是是最好的选择。当然我们不会因此就放弃设计模式的学习和使用,它是一把上好的武器,只有理解了它,在合适的时候,我们才能让它绽放光彩!

2022-05-05 00:26:20 76

原创 Spring源码私家笔记—— ApplicationContext.refresh()方法浅析

从本章开始我们将开始进入Spring容器真正的刷新启动过程,直接点击或者debugger进入AbstractApplicationContext的refresh()方法。这里再次提示一下大家,在先前的提到过的“胸有大纲,心中不慌”,大家务必要克制自己挨个debugger进refresh的每个方法进行查看的冲动。大家想啊,Spring的作者把一个个的对象和方法封装出来,就是想要屏蔽底层实现的复杂性,那我们就按照这一个个方法名先理解个大概。建议大家直接把springframework的官方源码clone下来,在

2022-05-04 19:26:10 77

原创 Spring源码私家笔记——Spring启动流程概述

在分析Spring源码之前,很容易陷入的一个误区就是,debugger一路点进去,然后迷失在茫茫的源码之中。其实分析源码跟我们做系统开发一样,不会上来就开始撸代码,而是先做好系统的设计,然后才开始分工合作。正所谓“胸中有大纲,心中不慌张”,无论我们debugger到了何处,想想我们在地图的何处,就可以导航回去。...

2022-05-03 14:39:03 561

原创 Spring源码私家笔记——Spring容器启动(refresh)前都做了哪些准备工作?

所有尝试分析Spring源码的同学都知道refresh()方法是源码中最为关键的一部分。那么在这之前,都做了什么准备工作,以及对于整个Spring容器启动的意义是什么呢?笔者对这个过程进行了一次简单的梳理(如下图),试图把这部分流程解释清楚。1. super(parent)我们使用ClassPathXmlApplicationContext进行测试public class Test { public static void main(String[] args) { Cl.

2022-05-03 01:09:24 454

原创 设计模式私家笔记-适配器模式Adapter

场景:我们已经有一些已有的系统对外提供服务,但是这些服务不能符合客户的接口形式要求,或者不是基于开放的标准协议构建的。这时候我们需要在已有接口之上增加一个适配层来满足对外的服务需要。适配层往往不是提前的设计,而是基于现有现有的系统进行的妥协和适配。生活中常见的例子比如:美国的电压是110V,中国的电压是220V,购买自美国的电脑电源就需要一个电源适配器。在IE浏览器盛行的时代,他的很多接口都不是符合后来的WEB标准的,所以很多前端框架为了能够提供基于标准协议的SDK,会为了IE做许多的适配工作。通过.

2022-05-02 22:51:06 349

原创 设计模式私家笔记-单例模式Singleton

场景:有的情况下,我们只需要创建一个实例,以此来节省创建和销毁的消耗,以及保持该实例的稳定性(不希望被外部破坏或篡改)此时我们可以应用单例模式来创建该实例的对象,下面列举几种方法,并且说明其各自的使用场景和优缺点

2022-04-24 20:36:16 67

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除