介绍
单例模式
线程安全的单例模式:饿汉模式 (类加载类初始化一个静态对象) / 懒汉模式 (双检索)
原型模式
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
为多个复杂的子系统提供一个一致的接口,使子系统更容易被访问。
组合模式
将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
模板方法
命令模式
将一个请求封装为一个对象,使发出的请求的责任和执行请求的责任分割开
责任链模式
将请求从链中的一个对象传递到下一个对象,直到请求被响应。通过这种方式去除对象间的耦合。
状态模式
中介者模式
定义一个中介来简化原有对象之间的交互关系 ,降低对象的耦合度,使原有的对象之间不必互相了解
访问者模式
在不改变集合元素的前提下,为一个集合中每个元素提供多种访问方式,即每个元素有多个访问者对象。
备忘录模式
在不破坏封装性的前提下,获取并保存一个对象的内部,以便以后回复它。
解释器
提供定义语言的方法,以及对语言语句的解释方法。