适配器设计模式
适配器模式分三种:
1.类适配器 2.对象适配器 3.缺省适配器
类适配器 让没有关系的类和接口产生联系 可以扩展功能 增加已有代码的复用性
使用一个适配器类同时继承类 和实现接口的方法 在这个类中调用他们的方法,让两者这件建立联系
public static void main(String[] args) {
Target iphone6 = new Iphone6();
iphone6.connection();
// 使用适配器的类 需要使用接口的类型来创建一个 同时拥有类和接口方法的适配类
Target iphone7 = new Adapter();
iphone7.connection();
}
}
class Iphone7 {
// 听音乐方法
public void listenMusic() {
System.out.println("直接使用充电口听");
}
}
// 目标接口
// 当前接口没有对iphone7 进行兼容
interface Target {
// 耳机连接抽象方法
public abstract void connection();
}
class Iphone6 implements Target {
@Override
public void connection() {
System.out.println("使用3.5mm听");
}
}
// 使用继承来实现 让类和接口产生联系
// 使用一个适配器类(相当于第三方类,通过这个类让类和接口 产生联系 提高接口的兼容性)
class Adapter extends Iphone7 implements Target {
// 实现抽象方法
@Override
public void connection() {
// TODO Auto-generated method stub
System.out.println("使用转接头");
super.listenMusic();
}
缺省适配器
一个接口中通常有很多的方法,实现这个接口的时候就需要实现接口中的所有方法.
但有的时候只需要其中的一两个方法,这个时候就可以用缺省适配器
例子:现在有健身房这样一个接口 大部分初学者都是没法同时完成这么多的任务,这时候就可以用缺省了
//健身房接口
interface JSF{
//跑步机
public abstract void PaoBuJi();
//卧推
public abstract void WoTui();
//哑铃
public abstract void YaLing();
}
先创建一个适配器来空实现接口中的方法
abstract class MyAdapter implements JSF{
@Override
public void PaoBuJi() {
// TODO Auto-generated method stub
}
@Override
public void WoTui() {
// TODO Auto-generated method stub
}
@Override
public void YaLing() {
// TODO Auto-generated method stub
}
}
这时根据不同的人就用不同的锻炼项目
//这时 就可以直接继承 是适配器类
class SP extends MyAdapter{
//重写适配器的方法
@Override
public void PaoBuJi() {
// TODO Auto-generated method stub
System.out.println("蛇皮跑了半小时.气喘吁吁");
}
}
class KDL extends MyAdapter{
@Override
public void PaoBuJi() {
System.out.println("KDL 跑步三小时");
}
@Override
public void YaLing() {
System.out.println("KDL 10公斤 100举");
}
结果:不同的人实现了不同的锻炼任务