适配器模式(adapter)主要包含以下角色:
目标(target)接口:当前系统业务所期待的接口.他可以是抽象类或者接口.
适配者(adaptee)类:他是需要被适配的现存组件.
适配器(adapter)类:转换器,通过继承或者引用适配者的对象,把适配者接口转换成目标接口.
1.类适配器模式
实现方式: 定义一个适配器类来实现当前系统业务接口,同时也继承现有组件库中已经存在的组件
/**
* 类适配器测试类
* 以手机type-c接口为例
* type-c接口的手机都是没有单独的耳机插孔,而是与充电孔集成在一起
* 我们以前买的圆孔的耳机就没法用了
* 于是我们需要一种适配器 来适配圆孔的耳机
*
* @author Administrator
*/
public class Test {
/**
* 测试
* @param args
*/
public static void main(String[] args) {
TypeCHeadSet typec = new TypeCHeadSet();
typec.playMusic();
// 调用适配器类 在typec手机上使用圆孔耳机
AdapterClass adapterClass = new AdapterClass();
adapterClass.playMusic();
}
}
/**
* 适配器类
* 继承需要适配的圆孔耳机类 实现我们当前业务的耳机接口
*/
class AdapterClass extends AdapteeClass implements HeadSet {
@Override
public void playMusic() {
// 在重写耳机几口中 调用运控耳机的功能
playMusicByOld();
}
}
/**
* typec耳机类 实现耳机接口
*/
class TypeCHeadSet implements HeadSet {
@Override
public void playMusic() {
System.out.println("使用了type-C耳机收听音乐");
}
}
/**
* 需要被适配的类(圆孔耳机类)
*/
class AdapteeClass {
public void playMusicByOld() {
System.out.println("使用了圆孔耳机收听音乐");
}
}
/**
* 耳机接口
*/
interface HeadSet {
/**
* 耳机接口中定义收听音乐方法
*/
void playMusic();
}
缺点:
类适配器模式违背了合成复用原则。类适配器是客户类有一个接口规范的情况下可用,反之不可用。
2.对象适配器模式
实现方式:对象适配器模式可以将适配对象引入适配器类中,该类同时实现当前系统的业务接口
修改类适配器:
/**
* 类适配器测试类
* 以手机type-c接口为例
* type-c接口的手机都是没有单独的耳机插孔,而是与充电孔集成在一起
* 我们以前买的圆孔的耳机就没法用了
* 于是我们需要一种适配器 来适配圆孔的耳机
*
* @author Administrator
*/
public class Test {
/**
* 测试
* @param args
*/
public static void main(String[] args) {
TypeCHeadSet typec = new TypeCHeadSet();
typec.playMusic();
// 调用适配器类 在typec手机上使用圆孔耳机
AdapterClass adapterClass = new AdapterClass(new AdapteeClass());
adapterClass.playMusic();
}
}
/**
* 适配器类
* 这里不再继承适配对象(圆孔耳机) 而是将圆孔耳机对象引入该类 同时还是实现当前业务的耳机接口
*/
class AdapterClass implements HeadSet {
// 适配者对象
private AdapteeClass adapteeClass;
public AdapterClass(AdapteeClass adapteeClass){
this.adapteeClass = adapteeClass;
}
@Override
public void playMusic() {
// 在重写耳机几口中 调用运控耳机的功能
adapteeClass.playMusicByOld();
}
}
/**
* typec耳机类 实现耳机接口
*/
class TypeCHeadSet implements HeadSet {
@Override
public void playMusic() {
System.out.println("使用了type-C耳机收听音乐");
}
}
/**
* 需要被适配的类(圆孔耳机类)
*/
class AdapteeClass {
public void playMusicByOld() {
System.out.println("使用了圆孔耳机收听音乐");
}
}
/**
* 耳机接口
*/
interface HeadSet {
/**
* 耳机接口中定义收听音乐方法
*/
void playMusic();
}
3.使用场景
-
以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
-
使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
272

被折叠的 条评论
为什么被折叠?



