适配器设计模式
适配器模式分三种:
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举"); }
结果:不同的人实现了不同的锻炼任务