【肥朝】从JDK中,咱们能学到哪些设计模式?

结构性模式:

适配器模式:

经常使用于将一个新接口适配旧接口算法

肥朝小声逼逼:在咱们业务代码中常常有新旧接口适配需求,能够采用该模式。编程

桥接模式:

将抽象和抽象的具体实现进行解耦,这样可使得抽象和抽象的具体实现能够独立进行变化。设计模式

肥朝小声逼逼:这个模式,其实咱们天天都在用到,可是你可能却浑然不知。只要你用到面向接口编程,其实都是在用桥接模式。缓存

组合模式

让客户端看起来在处理单个对象和对象的组合是平等的,换句话说,某个类型的方法同时也接受自身类型做为参数。(So in other words methods on a type accepting the same type)框架

肥朝小声逼逼:从上面那句英文咱们就能够得知,组合模式经常使用于递归操做的优化上,好比每一个公司都有个boss系统,都会有什么菜单的功能。好比一级菜单下有二级菜单,二级菜单又有三级菜单。删除一级菜单的时候须要不断删除子菜单,那么这个设计模式你能够试试。总之,凡有级联操做的,你均可以尝试这个设计模式。分布式

装饰者模式

动态的给一个对象附加额外的功能,所以它也是子类化的一种替代方法。该设计模式在JDK中普遍运用,如下只是列举一小部分学习

肥朝小声逼逼:这个模式使用就太广了,咱们经常使用的AOP,既有动态代理,也有装饰者的味道。优化

门面模式

为一组组件,接口,抽象或子系统提供简化的接口。设计

肥朝小声逼逼:咱们天天使用的SLFJ日志就是门面日志,好比咱们使用Dubbo,向外提供的服务就尽可能采用门面模式,而后服务在调用各类service作聚合。3d

享元模式

使用缓存来减小对小对象的访问时间

肥朝小声逼逼:只要用到了缓存,基本都是在使用享元模式。不少同窗都说本身的项目太low了,都没有用到什么设计模式,这不是开玩笑吗,你用个map缓存几个对象,基本上都运用了享元的思想。

代理模式

代理模式用于向较简单的对象代替建立复杂或耗时的对象。

肥朝小声逼逼:代理模式用得很普遍,基本全部你们知道的开源框架,都用到了动态代理。

建立模式

抽象工厂模式

抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型。它使得应用程序可以和使用的框架的具体实现进行解耦。在JDK和许多开源框架,好比Spring中随处可见,它们很容易被发现。任何用于建立对象但返回接口或抽象类的,就是抽象工厂模式了。(any method that is used to create an object but still returns a interface or abstract class)

肥朝小声逼逼:从英文就能够得出,该模式能够与策略模式结合使用。

建造者模式

用于经过定义一个类来简化复杂对象的建立,该类的目的是构建另外一个类的实例。构建器模式还容许实现Fluent接口。

肥朝小声逼逼:这个在咱们业务代码中使用的场景太普遍了。好比订单系统大部分项目都有,订单对象就是一个复杂对象,咱们就能够采用建造者模式来作。

工厂方法

只是一个返回实际类型的方法。

肥朝小声逼逼:这个属于你们都会的设计模式,很少过介绍。

原型模式

使得类的实例可以生成自身的拷贝。若是建立一个对象的实例很是复杂且耗时时,就可使用这种模式,而不从新建立一个新的实例,你能够拷贝一个对象并直接修改它。

肥朝小声逼逼:这个你觉得是冷门的设计模式,其实错了,这个是大热门的设计模式。好比咱们业务代码,常常要各类DTO、BO、DO、VO转换,其实就能够参考原型设计模式的思想来作。

单例模式

用来确保类只有一个实例。Joshua Bloch在Effetive Java中建议到,还有一种方法就是使用枚举。

肥朝小声逼逼:在平时开发中,单例是咱们用得最多的了,由于Spring的bean,默认就是单例级别的。单例属于你们基本都会的设计模式。

行为模式

责任链

经过把请求从一个对象传递到链条中下一个对象的方式来解除对象之间的耦合,直到请求被处理完毕。链中的对象是同一接口或抽象类的不一样实现。

肥朝小声逼逼:凡是带有Filter关键词的,基本都在用这个设计模式。在业务代码使用的场景实在是太多了,用到拦截器的地方基本都在用这个设计模式。

命令模式

将命令包装在对象中,以即可以将其存储,传递到方法中,并像任何其余对象同样返回。

肥朝小声逼逼:命令模式使用频率较高,和策略模式比较像,具体区别能够搜索一下。若是用过Activiti工做流引擎的朋友能够看一下里面的源码,不少地方都用到了命令模式。

解释器模式

此模式一般描述为该语言定义语法并使用该语法来解释该格式的语句。(This pattern generally describes defining a grammar for that language and using that grammar to interpret statements in that format.)

肥朝小声逼逼:这个比较冷门,肥朝没怎么用过,你用过的话能够留言告诉肥朝。

迭代器模式

提供一个统一的方式来访问集合中的对象。

肥朝小声逼逼:这个中间件和基础框架组的同窗可能用得比较多,业务代码的话用得很少,不过JDK中的这种使用很经典,能够看看。

中介者模式

经过使用一个中间对象来进行消息分发以及减小类之间的直接依赖。

肥朝小声逼逼:看到这个描述不用我多说什么,业务代码使用的场景太多了。好比大家用MQ,其实就是在用中介者模式。因此肥朝一再强调,即便是天天CRUD,关注肥朝一块儿学习,也能给你的CRUD项目,加上美颜+滤镜(设计模式)的增强效果。

备忘录模式

生成对象状态的一个快照,以便对象能够恢复原始状态而不用暴露自身的内容。好比Date对象经过自身内部的一个long值来实现备忘录模式。

肥朝小声逼逼:这个在业务中使用得很少,据肥朝了解其中一种场景是,你要把数据丢到MQ,可是MQ暂时不可用,那么你把数据暂存到DB,后面再轮询丢到MQ。若是你有更好的场景,留言告诉肥朝。

空对象模式

它容许您抽象空对象的处理。

肥朝小声逼逼:这个业务代码用得很少,可是JDK中的这几个方法咱们却是挺经常使用的。

观察者模式

用于为组件提供一种灵活地向感兴趣的接收者广播消息的方式。

肥朝小声逼逼:咱们业务代码通常是基于Zookeeper来作观察者的。基本上用到ZK的地方,都是在用观察者模式,好比分布式锁,好比服务发现等。

状态模式

容许您在运行时根据内部状态轻松更改对象的行为。

肥朝小声逼逼:这个在业务代码用得就太普遍了,我就不信大家系统尚未“状态”了。好比咱们常见的订单状态或者各类XX状态,均可以用得上。

策略模式

使用这个模式来将一组算法封装成一系列对象。经过调用这些对象能够灵活的改变程序的功能。

肥朝小声逼逼:这个过高频了,经常使用于优化大量的if-else,若是这个设计模式都不会,出去不要说关注过肥朝的公众号!

模板方法模式

让子类能够重写方法的一部分,而不是整个重写,你能够控制子类须要重写那些操做。

肥朝小声逼逼:这个模式也是很是高频的模式。业务代码中常常遇到有不少相同的部分,咱们能够作一个抽象类,子类来实现差别化,若是还不知道的,赶忙搜索一下,再次强调,很是高频。

访问者模式

提供一个方便的可维护的方式来操做一组对象。它使得你在不改变操做的对象前提下,能够修改或者扩展对象的行为。

肥朝小声逼逼:这个肥朝使用的频率不高,若是你有在业务代码中使用,欢迎留言告诉肥朝。

写在最后

相关文章
相关标签/搜索