目录
适配器模式是一个结构性模式
定义:
将一个类的接口转换成客户希望的另一个接口。适配器模式让那些
接口不兼容的类可以一起工作
适配器模式:类适配器和对象适配器两种模式
类适配器模式UML图:
public class Adapter extends Adaptee implements Target {
public void request() {
super.specificRequest();
}
}
对象适配器UML:
public class Adapter extends Target {
private Adaptee adaptee; //维持一个对适配者对象的引用
public Adapter(Adaptee adaptee) {
this.adaptee=adaptee;
}
public void request() {
adaptee.specificRequest(); //转发调用
}
}
实例:
某公司欲开发一款儿童玩具汽车,为了更好地吸引小朋友的注意力,该玩具汽车在移动过程中伴随着灯光闪烁和声音提示。在该公司以往的产品中已经实现了控制灯光闪烁(例如警灯闪烁)和声音提示(例如警笛音效)的程序。 为了重用先前的代码并且使得汽车控制软件具有更好的灵活性和扩展性,现使用适配器模式设计该玩具汽车控制软件
public abstract class CarController {
public void move(){
System.out.println("玩具汽车移动");
}
public abstract void phonate();//发出声音
public abstract void twinkle();//灯光闪烁
}
public class PoliceLamp {
public void alarmLamp() {
System.out.println("警灯闪耀");
}
}
public class PoliceSound {
public void alarmSound(){
System.out.println("发出警笛声");
}
}
public class PoliceCarAdapter extends CarController {
private PoliceLamp lamp;
private PoliceSound sound;
public PoliceCarAdapter() {
lamp = new PoliceLamp();
sound = new PoliceSound();
}
//调用适配器者类PoliceLamp
@Override
public void phonate() {
lamp.alarmLamp();
}
//调用适配器者类PoliceSound
@Override
public void twinkle() {
sound.alarmSound();
}
}
public class Client {
public static void main(String[] args) {
CarController car;
car = new PoliceCarAdapter();
car.phonate();
car.twinkle();
car.move();
}
}