适配器设计模式:
所谓的适配器设计模式就是在接口(或者抽象类)与子类之间定义一个中间类,让中间类去实现接口,然后子类再继承中间类,这样的好处是子类可以选择性的覆写接口的方法。
package com.sun;
public class Test{
public static void main(String[] args) {
}
}
interface Animal{
public void eat();
public void sleep();
public void walk();
public void creep();//爬行
public void flying();//飞行
}
//人的子类
class Human implements Animal{
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void sleep() {
System.out.println("睡觉");
}
@Override
public void walk() {
System.out.println("行走");
}
@Override
public void creep() {
}
@Override
public void flying() {
}
}
//定义一个小鸟类
class Bird implements Animal {
@Override
public void eat() {
System.out.println("吃草");
}
@Override
public void sleep() {
System.out.println("睡觉");
}
@Override
public void walk() {
System.out.println("行走");
}
@Override
public void creep() {
}
@Override
public void flying() {
System.out.println("飞行");
}
}
发现了问题:子类可能只需使用到父类(接口)的某些方法,但是语法要求子类必须覆写父类的所有抽象方法,但是部分抽象方法是不需要使用到的,那么这些方法覆写之后就没用,此时可以在子类和父类之间定义一个中间类实现父类的所有抽象方法,子类再继承这个中间类,这个中间类就是适配器类。
定义适配器类
package com.sxt;
public class TestDemo05 {
public static void main(String[] args) {
}
}
interface Animal {
public void eat();
public void sleep();
public void walk();
public void creep();
public void flying();
}
class Adapter implements Animal {
@Override
public void eat() {}
@Override
public void sleep() {}
@Override
public void walk() {}
@Override
public void creep() {}
@Override
public void flying() {}
}
class Human extends Adapter{
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void sleep() {
System.out.println("睡觉");
}
@Override
public void walk() {
System.out.println("走路");
}
}
class Brid extends Adapter{
public void eat() {
System.out.println("吃虫子");
}
public void sleep() {
System.out.println("睡觉");
}
public void flying() {
System.out.println("飞翔");
}
}
以上的这种设计思想就是适配器模式
总结:
在子类和父类之间定义一个中间类实现父类(接口)的所有抽象方法,子类再继承这个中间类,子类可以选择性的覆写接口(父类)的抽象的方法,这个中间类就是适配器类,这种设计思想叫做适配器设计模式。
使用场景,比如说要在servlet中要实现文件的上传、下载,此时会将上传和下载的方法抽象到父类中,这个父类作为公共父类,可以多个子类去继承,但是有的子类不并不需要下载的功能,只需要上传,而其他子类需要下载但是不需要上传,有的子类需要上传和下载,有的子类不需要上传和下载,如果此时不使用适配器,那么所有的子类都要覆写下载和上传的方法。