适配器模式定义:
1.Convert the interface of a class into another interface clients expect.Adapter lets classes work together that' couldn't other wise because of incompatible interfaces。
(将一个类的接口变成客户端所期待的另一种接口,从而使原本接口因接口不匹配而无法在一起工作的两个类能够在一起工作。)
1.适配器又叫做变压器模式,也叫做包装模式(wrapper)
2.适配器模式在生活中还是很常见的,比如你笔记本上的电源适配器,可以使用110~220v之间变化的电源,而笔记本还能正常工作,这也是适配器一个良好模式的体现
简单来说,适配器模式就是一个把几口或类转换成其他接口或类,从另一个方面来说,适配器模式也就是一个包装模式。
通过继承进行的适配,叫做类适配器。需要的角色有:
1.target目标角色:该角色定义把其他类转换为何种接口,也就是我们期望接口。
2.Adapter原角色:你想把谁转换成目标角色,这个“谁”就是原角色,他是已经存在的,运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新,靓丽的角色
3.Adapter适配器角色:适配器模式的狠心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,他的职责非常简单:把原角色转换为目标角色,
怎么转换:通过继承或是类关联的方式,各个角色的职责已经非常清楚,我们再来看看其通用源码:
目标角色:也就是接口
角色实现类:
最重要的:适配器角色
原角色:
场景类:
适配器模式的使用场景:适配器的使用场景:适配器的使用场景只要记住一点就够了,你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式,比如你的系统扩展了,需要使用一个已有或新建立的类,
但这个类又不符合系统的接口,怎么办?使用适配器模式,这也是我们例子中提到的。
适配器模式的注意事项:
适配器模式最好在详细设计阶段不要考虑他,他不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题,没有一个系统分析师会在做详细设计的时候考虑使用适配器模式,这个模式使用的主要场景是
扩展应用中,就像我们上面的那个例子一样,系统扩展了,不符合原有设计的时候才考虑通过适配器模式减少代码修改带来的风险。再次提醒一点,项目一定要遵守依赖倒置原则和里氏替换原则,否则即使在适合
使用适配器的场合下,也会带来非常大的改造。
接下来用员工系统举个例子看看对象适配器。
工作信息:
员工基本信息接口:
用户的家庭信息:
用户的基本信息:
然后是实现类:
接下来是我们的核心——适配器。我们看代码
最后是场景类:
这次把IUserInfo接口需要的所有操作都委托给其他三个接口下的实现类,他的委托是通过对象层次关系进行委托的,而不是继承关系,这就叫做对象适配器。
适配器的通用代码也比较简单,把原来的继承关系变更为关联关系就可以了,不在赘述。
对象适配器和类适配器的区别是:类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系,这是两者的根本区别。二者在实际项目中都会经常用到,对于对象适配器是通过类间的关联关系进行耦合的,因此在设计时就做到比较灵活,比如修补原角色隐形缺陷,关联其他对象等,而类适配器就只能通过覆写原角色的方法进行扩展,在实际项目中,对象适配器使用到的场景相对较多。