有点嫁接的感觉,对外展示的是一个类或接口,内部可能是其他类或接口,对外无感知。
类适配器:继承实现,静态定义
对象适配器:代理实现,动态组合模式
接口适配器:选择性重写接口方法,不必全部重写
一、对象适配器
鸟类接口
public interface Bird {
public void fly();
public void say();
}
鸟类实现类
public class Duck implements Bird {
@Override
public void fly() {
System.out.println("i'm Duck! i can fly!");
}
@Override
public void say() {
System.out.println("ga ga ga");
}
}
动物接口
public interface Animal {
public void name();
public void canDo();
}
动物实现类
public class Monkey implements Animal {
@Override
public void name() {
System.out.println("i'm monkey!");
}
@Override
public void canDo() {
System.out.println("i can say ji ji zha zha !");
}
}
适配器
public class BirdAdapter implements Bird {
private Animal ani;
BirdAdapter(Animal a){
this.ani = a;
}
@Override
public void fly() {
ani.name();
}
@Override
public void say() {
ani.canDo();
}
}
二、类适配器
public class BirdAdapter2 extends Monkey implements Bird {
@Override
public void fly() {
name();
}
@Override
public void say() {
canDo();
}
}
测试类
public class AdapterTest {
public void test(Bird b){
b.fly();
b.say();
}
/**
* 对象适配器
*/
@Test
public void test1() {
AdapterTest t = new AdapterTest();
Animal a = new Monkey();
BirdAdapter ad = new BirdAdapter(a);
t.test(ad);
System.out.println("神不神奇,奇不奇怪");
}
/**
* 类适配器
*/
@Test
public void test2(){
Bird b = new BirdAdapter2();
b.fly();
b.say();
}
}
三、接口适配器
鸟类接口
public interface Bird {
public void name();
public void fly();
public void say();
}
适配器
public abstract class BirdAdapter implements Bird {
@Override
public void name() {
}
@Override
public void fly() {
}
@Override
public void say() {
}
}
鸭子
public class Duck extends BirdAdapter {
public void fly() {
super.fly();
}
public void say() {
super.say();
}
}
网友评论