Adapter Pattern
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间
1.该模式中有3个对象:目标对象,适配器,被适配者
2.目标对象:客户想要用的接口对象,我们想要将别的接口伪装成的对象
3.适配器:目标对象和被适配者的中间组件,该类中存放有被适配者,但是继承目标对象。对外,他是目标对象,自己内部却是调用了被适配者的方法来伪装成目标对象。
4.被适配者:客户想要将该对象变成目标对象,适配器通过恰当的调用该类中的方法从而达到伪装效果
目标对象
public interface Duck { public void quack(); public void fly(); }
public class MallardDuck implements Duck { @Override public void quack() { System.out.println("Quack!"); } @Override public void fly() { System.out.println("I'm flying"); } }
public interface Turkey { public void gobble(); public void fly(); }
public class WildTurkey implements Turkey { @Override public void gobble() { System.out.println("Gobble gobble"); } @Override public void fly() { // TODO Auto-generated method stub System.out.println("I'm flying a short distance"); } }
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } @Override public void quack() { // TODO Auto-generated method stub turkey.gobble(); } @Override public void fly() { // TODO Auto-generated method stub for(int i=0;i<5;i++){ turkey.fly(); } } }
public class DuckTestDrive { public static void main(String[] args) { MallardDuck duck = new MallardDuck(); Turkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("The turkey says ..."); turkey.gobble(); turkey.fly(); System.out.println("The duck says ..."); duck.quack(); duck.fly(); System.out.println("The turkeyAdapter says ..."); turkeyAdapter.quack(); turkeyAdapter.fly(); } }
输出
The turkey says ... Gobble gobble I'm flying a short distance The duck says ... Quack! I'm flying The turkeyAdapter says ... Gobble gobble I'm flying a short distance I'm flying a short distance I'm flying a short distance I'm flying a short distance I'm flying a short distance