前言
前四篇文章已介绍三种类型设计模式,其中模板方法模式,责任链模式是行为型模式,代理模式、装饰模式是结构型模式,本节介绍结构型模式的适配器模式,这四种模式在结构上比较类似,而又极易相互混淆,让程序作者应对实际问题时不知如何选择。
学习目标
1、认识适配器模式的结构。
2、如何在业务中使用适配器模式,快速响应业务需求变化。
概念
指将一个类的接口转换成客户端程序期望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
解释
一个类的接口,即已存在一个实现了业务逻辑的接口。
另外一个接口,即另一个存在的接口或类。
释义:可以这么理解,这两个接口,一个是本系统的接口,另一个是其它构件(第三方提供的jar包)提供的接口
。
实际业务场景中,现在你想将部分逻辑交给构件处理,部分逻辑交给本系统接口处理,那么你需要提供一个方案,既能使用构件的接口又能使用本系统的接口,那这个方案就是适配器类。
适配器更像一个伪装者,伪装成两个接口。
一般情况下适配器通常适配两个接口,如果适配三个,四个,那样就不是适配器模式了并且业务逻辑也搞复杂了,要紧记单一职责原则。
记忆关键点
在系统中已存在两种业务的接口
编写一个适配器来使用已存在的业务。客户端程序只需使用适配器就可以完成业务处理。
类结构图
实现步骤
请看实例。
相似模式,区分及应用
适配器模式与代理模式、装饰模式的区别请看《设计模式应用实例二(代理模式的应用)》
扩展联想
实例
在spring-context包下
org.springframework.validation.beanvalidation.SpringValidatorAdapter正是适配JSR-303标准javax.validator.Validator接口(请看hibernate-validator源码或《设计模式应用实例二(代理模式的应用)》的简要实现说明)。以便将javax.validator.Validator的方法开放给spring框架中CustomValidatorBean这样的包装器使用。
public class SpringValidatorAdapter implements SmartValidator, javax.validation.Validator {
private javax.validation.Validator targetValidator;
public SpringValidatorAdapter(javax.validation.Validator targetValidator) {
Assert.notNull(targetValidator, "Target Validator must not be null");
this.targetValidator = targetValidator;
}
//---------------------------------------------------------------------
// Implementation of Spring Validator interface
//---------------------------------------------------------------------
//下面省略实现org.springframework.validation.SmartValidator 接口的方法
//---------------------------------------------------------------------
// Implementation of JSR-303 Validator interface
//---------------------------------------------------------------------
//下面省略实现javax.validation.Validator的方法
}
在上面程序源码中作者注明实现方法的接口
public class CustomValidatorBean extends SpringValidatorAdapter implements Validator, InitializingBean {
}
上面CustomValidatorBean 的作用是在spring容器中创建SpringValidatorAdapter对象以供框架在别的程序代码中使用SpringValidatorAdapter对象
回顾
1、介绍适配器模式的概念
2、简要说明适配器模式的结构
3、介绍Validator是如何被适配到spring框架中。