概述
适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
适配器模式分为三种:接口适配器,类适配器,对象适配器
举例说明
接口适配器
有一个票务接口
/**
* 票务接口
*/
public interface Ticketing {
//查询
void queryTicket();
//支付
void payment();
//退票
void refundTicket();
//改签
void ticketChange();
}
假设火车票只需要查询和支付功能,飞机票只需要退款和改签功能,那么火车票务类与飞机票务类都没必须要实现Ticketing的全部方法,此时定义一个TicketingAdapter类实现Ticketing接口,对Ticketing的所有方法做空实现
/**
* 适配器,对Ticketing接口的所有方法做空实现
*/
public class TicketingAdapter implements Ticketing{
@Override
public void queryTicket() {
}
@Override
public void payment() {
}
@Override
public void refundTicket() {
}
@Override
public void ticketChange() {
}
}
再让火车票务类与飞机票务类继承TicketingAdapter类,重写需要的方法即可
public class TrainTicket extends TicketingAdapter{
@Override
public void queryTicket() {
System.out.println("火车票查询");
}
@Override
public void payment() {
System.out.println("火车票支付");
}
}
public class PlaneTicket extends TicketingAdapter{
@Override
public void refundTicket() {
System.out.println("机票退款");
}
@Override
public void ticketChange() {
System.out.println("机票改签");
}
}
类适配器
要将一个转换成满足另一个新接口的类时可以用类的适配器模式,新建一个类,继承原有的类并实现新接口即可
原有的类
public class OldClass {
public void method1(){
System.out.println("OldClass method1");
}
}
新接口
public interface NewClass {
void method1();
void method2();
void method3();
}
类适配器
public class ClassAdapter extends OldClass implements NewClass{
@Override
public void method2() {
System.out.println("Adapter method2");
}
@Override
public void method3() {
System.out.println("Adapter method3");
}
}
新接口中的method1方法适配原有的类的method1方法,当然新接口中的方法名不是method1也可以,实现新方法调用原有类中的方法即可。