阿里资深架构师分享:23种设计模式核心知识要点

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。同时数据模式在很多大厂的面试中是会被经常问到的。今天给大家分享23种设计模式的核心知识点。

阿里资深架构师分享:23种设计模式核心知识要点

image

**注意,注意,除了分享设计模式的核心知识点之外,后面会给大家分享一些设计模式的面试题,由于文章长度的限制,有兴趣的朋友可以关注微信公众号:Java程序员聚集地。获取

单例模式(Singleton Pattern)

阿里资深架构师分享:23种设计模式核心知识要点

 

工厂模式

阿里资深架构师分享:23种设计模式核心知识要点

 

抽象工厂模式(Abstract FactoryPattern)

阿里资深架构师分享:23种设计模式核心知识要点

 

模板方法模式(Template MethodPattern)

阿里资深架构师分享:23种设计模式核心知识要点

 

建造者模式(Builder Pattern)

阿里资深架构师分享:23种设计模式核心知识要点

 

代理模式

阿里资深架构师分享:23种设计模式核心知识要点

 

原型模式

阿里资深架构师分享:23种设计模式核心知识要点

 

中介者模式:

阿里资深架构师分享:23种设计模式核心知识要点

 

命令模式:

阿里资深架构师分享:23种设计模式核心知识要点

 

责任链模式

阿里资深架构师分享:23种设计模式核心知识要点

 

装饰模式:

策略模式

适配器模式

迭代器模式

组合模式

观察者模式

门面模式

备忘录模式

访问者模式

状态模式

解释器模式

享元模式

桥梁模式

后面13种模式就没有跟大家一一列举出来了,所有的核心知识点都整理在文档里面,关于这23种设计模式都会详细的给大家分析,对文档感兴趣的朋友可以关注微信公众号:Java程序员聚集地。

关于设计模式大厂经常考到的问题:

单例模式:

  • 单例模式保证全局的单例类只有一个实例,这样的话使用的时候直接获取即可,比如数据库的一个连接,Spring里的bean,都可以是单例的。
  • 单例模式一般有5种写法。
  • 第一种是饿汉模式,先把单例进行实例化,获取的时候通过静态方法直接获取即可。缺点是类加载后就完成了类的实例化,浪费部分空间。
  • 第二种是饱汉模式,先把单例置为null,然后通过静态方法获取单例时再进行实例化,但是可能有多线程同时进行实例化,会出现并发问题。
  • 第三种是逐步改进的方法,一开始可以用synchronized关键字进行同步,但是开销太大,而后改成使用volatile修饰单例,然后通过一次检查判断单例是否已初始化,如果未初始化就使用synchronized代码块,再次检查单例防止在这期间被初始化,而后才真正进行初始化。
  • 第四种是使用静态内部类来实现,静态内部类只在被使用的时候才进行初始化,所以在内部类中进行单例的实例化,只有用到的时候才会运行实例化代码。然后外部类再通过静态方法返回静态内部类的单例即可。
  • 第五种是枚举类,枚举类的底层实现其实也是内部类。枚举类确保每个类对象在全局是唯一的。所以保证它是单例,这个方法是最简单的。
    工厂模式
  • 简单工厂一般是用一个工厂创建多个类的实例。
  • 工厂模式一般是指一个工厂服务一个接口,为这个接口的实现类进行实例化
  • 抽象工厂模式是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,接口又会包含多个实现类,通过一个工厂就可以把这些绑定在一起,非常方便。

原型模式

一般通过一个实例进行克隆从而获得更多同一原型的实例。使用实例的clone方法即可完成。

建造者模式

  • 建造者模式中有一个概念叫做链式调用,链式调用为一个类的实例化提供便利,一般提供系列的方法进行实例化,实际上就是将set方法改造一下,将原本返回为空的set方法改为返回this实例,从而实现链式调用。
  • 建造者模式在此基础上加入了builder方法,提供给外部进行调用,同样使用链式调用来完成参数注入。


一部分模式大厂面试经常会问到的一个总结,大家有需要更多的面试真题,可以关注微信公众号:Java程序员聚集地

 阿里资深架构师分享:23种设计模式核心知识要点