有點嫁接的感覺,對外展示的是一個類或接口,內(nèi)部可能是其他類或接口,對外無感知。
類適配器:繼承實現(xiàn),靜態(tài)定義
對象適配器:代理實現(xiàn),動態(tài)組合模式
? ? 接口適配器:選擇性重寫接口方法,不必全部重寫
一、對象適配器
鳥類接口
public interface Bird {
public void fly();
public void say();
}
鳥類實現(xiàn)類
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();
}
動物實現(xiàn)類
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();
}
}