阿里资深架构师分享:23种设计模式核心知识要点
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。同时数据模式在很多大厂的面试中是会被经常问到的。今天给大家分享23种设计模式的核心知识点。
image
**注意,注意,除了分享设计模式的核心知识点之外,后面会给大家分享一些设计模式的面试题,由于文章长度的限制,有兴趣的朋友可以关注微信公众号:Java程序员聚集地。获取
单例模式(Singleton Pattern)
工厂模式
抽象工厂模式(Abstract FactoryPattern)
模板方法模式(Template MethodPattern)
建造者模式(Builder Pattern)
代理模式
原型模式
中介者模式:
命令模式:
责任链模式
装饰模式:
策略模式
适配器模式
迭代器模式
组合模式
观察者模式
门面模式
备忘录模式
访问者模式
状态模式
解释器模式
享元模式
桥梁模式
后面13种模式就没有跟大家一一列举出来了,所有的核心知识点都整理在文档里面,关于这23种设计模式都会详细的给大家分析,对文档感兴趣的朋友可以关注微信公众号:Java程序员聚集地。
关于设计模式大厂经常考到的问题:
单例模式:
- 单例模式保证全局的单例类只有一个实例,这样的话使用的时候直接获取即可,比如数据库的一个连接,Spring里的bean,都可以是单例的。
- 单例模式一般有5种写法。
- 第一种是饿汉模式,先把单例进行实例化,获取的时候通过静态方法直接获取即可。缺点是类加载后就完成了类的实例化,浪费部分空间。
- 第二种是饱汉模式,先把单例置为null,然后通过静态方法获取单例时再进行实例化,但是可能有多线程同时进行实例化,会出现并发问题。
- 第三种是逐步改进的方法,一开始可以用synchronized关键字进行同步,但是开销太大,而后改成使用volatile修饰单例,然后通过一次检查判断单例是否已初始化,如果未初始化就使用synchronized代码块,再次检查单例防止在这期间被初始化,而后才真正进行初始化。
- 第四种是使用静态内部类来实现,静态内部类只在被使用的时候才进行初始化,所以在内部类中进行单例的实例化,只有用到的时候才会运行实例化代码。然后外部类再通过静态方法返回静态内部类的单例即可。
- 第五种是枚举类,枚举类的底层实现其实也是内部类。枚举类确保每个类对象在全局是唯一的。所以保证它是单例,这个方法是最简单的。
工厂模式 - 简单工厂一般是用一个工厂创建多个类的实例。
- 工厂模式一般是指一个工厂服务一个接口,为这个接口的实现类进行实例化
- 抽象工厂模式是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,接口又会包含多个实现类,通过一个工厂就可以把这些绑定在一起,非常方便。
原型模式
一般通过一个实例进行克隆从而获得更多同一原型的实例。使用实例的clone方法即可完成。
建造者模式
- 建造者模式中有一个概念叫做链式调用,链式调用为一个类的实例化提供便利,一般提供系列的方法进行实例化,实际上就是将set方法改造一下,将原本返回为空的set方法改为返回this实例,从而实现链式调用。
- 建造者模式在此基础上加入了builder方法,提供给外部进行调用,同样使用链式调用来完成参数注入。
一部分模式大厂面试经常会问到的一个总结,大家有需要更多的面试真题,可以关注微信公众号:Java程序员聚集地