设计模式:学习笔记(10)——适配器模式
设计模式:学习笔记(10)——适配器模式
适配器
适配器是什么,你一定不难理解,因为现实中到处都是。比方说:如果你需要在欧洲国家使用美国制作的笔记本电脑,你可能需要一个交流电的适配器......
图中所示,交流电适配器位于两者之间,它的工作是将欧式插座转换成美式插座,好让美式插头可以插进这个插座得到电力。
适配器改变了插座的接口,以符合美式笔记本电脑的需求。OO适配器和真实世界的适配器扮演者同样的角色:将一个接口转换成另一个接口,以符合客户的期望。
面向对象的适配器
适配器模式
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。
相关类图
实例代码
我们定义了一个鸭子接口
public interface Duck{
public void quack();
public void fly();
}
绿头鸭是鸭子的子类
public class MallarDuck implements Duck{
public void quack()
{
System.out.println("Quack");
}
public void fly()
{
System.out.println("I am flying");
}
}
我们定义了一个火鸡
public class WildTurkey{
public void gobble()
{
System.out.println("Gobble gobble");
}
public void fly()
{
System.out.println("I am flying a short distance");
}
}
我们想让火鸡来冒充鸭子,显而易见,因为火鸡的接口不同,我们不能公然拿来用,那么我们编写一个适配器
public class TurkeyAdapter implements Duck{
WildTurkey turkey;
public TurkeyAdapter(WildTurkey turkey)
{
this.turkey =turkey;
}
public void quack()
{
turkey.gobble();
}
public void fly()
{
turkey.fly();
}
}
现在我们来测试我们的适配器
public static void main(String[] args) {
MallarDuck duck = new MallarDuck();
WildTurkey turkey =new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
duck.fly();
turkeyAdapter.fly();
duck.quack();
turkeyAdapter.quack();
}