新舊兩個(gè)接口,功能類似,舊的接口已漸漸不再使用,如何讓舊接口調(diào)整為新接口的樣式呢(方便其他程序調(diào)用)?寫一個(gè)銜接作用的adapter即可。
如下:Duck和Turkey是兩個(gè)接口,他們的功能類似,僅僅是方法的名稱不同。如何把Turkey接口調(diào)整成Duck,以方便調(diào)用呢?
package javaapplication31;
public class Main {
public static void main(String[] args) {
Duck duck = new MallardDuck();
duck.quack();
Turkey turkey = new WildTurkey();
turkey.gobble();
}
}
interface Duck {
public void quack();
public void fly();
}
class MallardDuck implements Duck {
public void quack() {
System.out.println("Mallard quacked");
}
public void fly() {
System.out.println("Mallard flying");
}
}
interface Turkey {
public void gobble();
public void fly();
}
class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Wild gobbled");
}
public void fly() {
System.out.println("Wild flying");
}
}
新增一個(gè)TurkeyAdapter類來完成轉(zhuǎn)換:
package javaapplication31;
public class Main {
public static void main(String[] args) {
Duck duck = new MallardDuck();
duck.quack();
Turkey turkey = new WildTurkey();
duck = new TurkeyAdapter(turkey);
duck.quack();
}
}
interface Duck {
public void quack();
public void fly();
}
class MallardDuck implements Duck {
public void quack() {
System.out.println("Mallard quacked");
}
public void fly() {
System.out.println("Mallard flying");
}
}
class TurkeyAdapter implements Duck {
Turkey turkey;
TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
public void quack() {
turkey.gobble();
}
public void fly() {
turkey.fly();
}
}
interface Turkey {
public void gobble();
public void fly();
}
class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Wild gobbled");
}
public void fly() {
System.out.println("Wild flying");
}
}

看到這個(gè)Adapter,是否想到了Command Pattern中的“裝載器”呢?異曲同工之妙。