适配器模式:将一个类的接口,转换成客户指望的另外一个接口。适配器让本来接口不兼容的类能够合做无间java
一个图很信息的说明适配器模式:this
举个栗子:3d
还记得策略模式中的鸭子嘛!如今有一个火鸡想加入到鸭子的队列中。但火鸡不会呱呱的叫,只会咕咕的叫,能飞,但不能像鸭子(野鸭)飞那么远。那么咱们就来包装下吧。code
这是火鸡的接口对象
public interface Turkey { public void gobble(); public void fly(); }
火鸡的实现:blog
public class WildTurkey implements Turkey { public void gobble() { System.out.println("Gobble gobble"); } public void fly() { System.out.println("i am flying a short distance"); } }
还记得鸭子的接口吗?接口
public interface Duck { public void quack(); public void fly(); }
显然火鸡的接口和鸭子的接口不匹配,因此咱们来作一个适配器吧!队列
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } // 包装叫声,符合鸭子接口 public void quack() { turkey.gobble(); } // 包装飞行,飞5次,追上鸭子的飞行距离 public void fly() { for (int i = 0; i < 5; i++) { turkey.fly } } }
咱们开始使用这个鸭子了:class
public class DuckTestDrive() { WildTurkey turkey = new WildTurkey(); // 火鸡假装鸭子 Duck turkeyAdapter = new TurkeyAdapter(turkey); turkeyAdapter.quack(); turkeyAdapter.fly(); }
火鸡成功假装成鸭子了!那么为何火鸡要假装成鸭子呢?im
不想改变原有的两个接口,又想让两个接口合做,那么就用适配器实现两个接口的对接
适配器模式和装饰者模式区别:适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增长新的行为和责任