介绍

单例模式

线程安全的单例模式:饿汉模式 (类加载类初始化一个静态对象) / 懒汉模式 (双检索)

原型模式

clone 深克隆、浅克隆

工厂方法

定义一个用户创建产品的接口,有子类决定生产什么产品。

抽象工厂

提供一个创建产品组的接口,其每个子类可以生产一系列的相关产品。

享元模式

运用共享技术来支持大量细粒度对象的复用。
池技术。String常量池、线程池、jdbc连接池。

策略模式

像诸葛亮的锦囊袋一样,不同的情况打开不现的锦囊妙计。
项目场景:
在项目环境下,如商品详情页,pc和app页面都要获取同一商品信息,商品信息是固定的,但因端的不同,获取到的数据可能略有差异而大体相同。这时候可以使用策略模式来体现端的差异,相同的部分走同个代码路径,差异的部分由策略路由到不同的业务实现。

代理模式

为某个对象提供一种代理以控制对象的访问。客户端只能间接地访问该对象,从而限制、增强或修改原对象的一些特征。
如spring的动态代理和aop。符合aop切面规则的类方法在invoke前后,代理类会去执行切面要做的工作,比如方法执行前打印参数,方法执行后打印执行时间 。

装饰模式

动态对对象增加一些职责,即增加额外功能。
如sitemesh这个框架,允许对不同URI路径返回的http responseBody做html装饰。比如对freemarker返回页面加菜单栏装饰。

适配器模式

只提供一套接口,但为每个业务方提供不同的适配器。

迭代器模式

如List.iterate()
List继承Collection -> Collection继承Iterable
Iterabale接口有iterate()方法,每个可迭代对象允许返回一个迭代器。
迭代器Iterator可被遍历,内部有hasNext(),next()和remove()三个方法

建造者模式

将一个复杂对象拆解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建。

观察者模式和发布订阅模式

观察者是松耦合的
发布订阅和观察者的区别在于:
发布订阅模式的发布人和订阅人之间并不认识,他们需要经纪人Broker进行交流通信。发布者只要告诉经纪人,我要向topic发送a消息,订阅者只需要告诉经纪人我要订阅topic,于是当broker拿到topic中发布人发布消息进,将消息转发给所有的topic订阅者。发布者和订阅者完全无耦合。

桥接模式

将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低抽象和实现这两个可变维度的耦合度。

外观模式 Facade

为多个复杂的子系统提供一个一致的接口,使子系统更容易被访问。

组合模式

将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

模板方法

命令模式

将一个请求封装为一个对象,使发出的请求的责任和执行请求的责任分割开

责任链模式

将请求从链中的一个对象传递到下一个对象,直到请求被响应。通过这种方式去除对象间的耦合。

状态模式

允许一个对象在其内部状态发生改变时改变其行为能力。

中介者模式

定义一个中介来简化原有对象之间的交互关系 ,降低对象的耦合度,使原有的对象之间不必互相了解

访问者模式

在不改变集合元素的前提下,为一个集合中每个元素提供多种访问方式,即每个元素有多个访问者对象。

备忘录模式

在不破坏封装性的前提下,获取并保存一个对象的内部,以便以后回复它。

解释器

提供定义语言的方法,以及对语言语句的解释方法。