概念
适配器模式(Adapter Pattern) 是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。适配器模式将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
举个栗子:漏斗大家肯定都见过,当我们的器皿口较小时,我们通过辅助工具-漏斗,为器皿填充液体,这里漏斗就起到适配的作用。
类适配器与对象适配器
适配器又分为类适配器与对象适配器
类适配器
使用继承的适配器
类图
/***类适配器***/
public class Banner {
public void showP(){
//...
}
public void showA(){
//...
}
}
public interface Print {
//弱化
void printWeak();
//强化
void printStrong();
}
//适配器
public class BannerPrint extends Banner implements Print{
//弱化
@Override
public void printWeak() {
super.showA();
}
//强化
@Override
public void printStrong() {
super.showP();
}
}
对象适配器
使用委托的适配器,合成聚合复用原则
类图
// 对象适配器:基于组合
public class Print {
//弱化
void printWeak();
//强化
void printStrong();
}
public class Banner {
public void showP(){ //... }
public void showA(){ //... }
}
public class BannerPrint extends Print {
private Banner banner;
public BannerPrint(Banner banner) {
this.banner = banner;
}
//弱化
@Override
public void printWeak() {
banner.showA();
}
//强化
@Override
public void printStrong() {
banner.showP();
}
}
两者区别
实现方式不同:类适配器使用继承关系来实现,对象适配器使用组合关系来实现
登场角色
target 对象
使用继承时Print接口,使用委托时Print类,定义角色所需要的方法
adapatee 被适配
Banner 它是被访问和适配的现存组件库中的组件接口
adapater 适配
BannerPrint 它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者