前言
设计模式不是割裂的,根据场景来看,很多设计模式往往同时存在
适配器模式
书面用语
适配器模式的意图在于,使用不同接口的类所提供的服务为客户端提供它所期望的接口。
大白话
适配器模式的最简化描述是,为已有的功能进行一层封装,以满足特定的新需求
构造一个场景
场景描述
- 类1有一个方法,获取当前时间的时间戳,方法名字为 getTimeStampNow
- 类1 已经被其它客户端调用了
- 类2 有一个产生随机数字的需求,但是 getRandomNumber 这样的方法名会更合适一些
场景探究
- 可以使用 类1 的 getTimeStampNow 方法为 类2 服务,但是这样有一个问题,类2 只是想获取一个随机数字,至于这个随机数字是如何产生的,它并不是很关注,所以 类2 用 getRandomNumber 命名的方法更加合适
- 类1 的 getTimeStampNow 不能被修改,它已经在为其他客户端服务
- 显然如果我们有一个新的类,并提供名为 getRandomNumber 的方法,而 getRandomNumber 方法内部调用类1的 getTimeStampNow 即可满足需求
适配器模式给出的解决方案
方案一 接口适配
- 类2 可以通过调用 接口3 来间接调用 类1,
这样就需要 类4(适配类) 来实现接口3
并且 类4(适配类) 继承 类1
- UML 图
方案二 类与对象适配
- 类2 可以直接调用 类3(适配类),
- 类3 内部引用 类1
- UML
适配器模式 适用场景
- 当客户端希望以自己期望的形式调用服务端,但是又不能直接改造服务端
- 可以提供一个满足客户端预期的适配类
- 适配类内部调用服务端
- 客户端调用适配类