前言
- 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
 
- 简单理解:设计模式就是各种套路
 - 适配器设计模式:解决接口与接口实现类之间的矛盾问题
 
需求分析
在实际开发过程中,当一个接口中抽象方法过多,但是我们只要使用其中一部分的时候,就可以使用适配器设计模式来实现代码(如果不使用适配器模式,一个非抽象类实现了这个接口,必须重写接口中的所有抽象方法)。
书写步骤
- 编写中间类XXXAdapter,实现对应的接口
 - 对接口中的抽象方法进行空实现
 
// 动物接口  
public interface Animal {  void makeSound();  void move();  
} 
- 让真正的实现类继承中间类,并重写需要用的方法
 - 为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰
 
案例实现
创建一个名为
Animal的接口,一个具体的实现类Dog,以及一个适配器AnimalAdapter。我们的目标是让Dog类适配到Animal接口,但Dog类本身并不直接实现Animal接口。我们将使用一个抽象的中间类AnimalAdapter来实现这一目的。
Aminal接口:
// 动物接口  
public interface Animal {  void makeSound();  void move();  
} 
Dog类:
// 狗类  
public class Dog {  public void bark() {  System.out.println("Woof! Woof!");  }  public void run() {  System.out.println("The dog is running.");  } } 
AnimalAdapter抽象适配器类:
- 设计为抽象类的目的是防止其他类创建适配器对象(因为适配器本身没有意义,只是用来适配,如果被创建出来对象是不正常的一种体现)。
 - 抽象适配器类
 AnimalAdapter,它实现了Animal接口,但方法都是空实现。
// 动物适配器抽象类  
public abstract class AnimalAdapter implements Animal {  // 空实现  @Override  public void makeSound() {  // 这个方法需要在子类中实现  }  // 空实现  @Override  public void move() {  // 这个方法需要在子类中实现  }  
} 
DogAdapter适配器类:
适配器类
DogAdapter,它继承自AnimalAdapter并重写需要的方法
// 狗适配器类  
public class DogAdapter extends AnimalAdapter {  private Dog dog;  public DogAdapter(Dog dog) {  this.dog = dog;  }  @Override  public void makeSound() {  // 调用Dog类的bark方法  dog.bark();  }  @Override  public void move() {  // 调用Dog类的run方法  dog.run();  }  
} 
测试
// 测试类  
public class AdapterPatternDemo {  public static void main(String[] args) {  // 创建一个Dog实例  Dog dog = new Dog();  // 创建一个DogAdapter实例,将Dog适配到Animal接口  Animal animal = new DogAdapter(dog);  // 使用Animal接口的方法来调用Dog的方法  animal.makeSound(); // 输出: Woof! Woof!  animal.move();      // 输出: The dog is running.  }  
} 
这样我们就可以针对需要的接口方法进行实现,增加了代码的扩展性和维护性。
