适配器模式(Adapter Pattern)是做为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。java
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。设计模式
意图
将一个类的接口转换成客户但愿的另一个接口。
适配器模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做。this
主要解决
主要解决在软件系统中,经常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能知足的。设计
如何解决
继承或依赖(推荐)。code
关键代码
适配器继承或依赖已有的对象,实现想要的目标接口。对象
使用场景
有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。blog
注意事项
适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。继承
Adaptee
接口:Robot.java
。提供cry()
和run()
方法。public interface Robot { void cry(); void move(); }
Adaptee
接口:BioRobot.java
。它能够叫和慢慢跑public class BioRobot implements Robot{ public void cry() { System.out.println("仿生机器人叫....."); } public void move() { System.out.println("仿生机器人慢慢移动...."); } }
Target
类:Dog.java
。它能够汪和快跑public class Dog { public void wang(){ System.out.println("小狗叫:汪汪....."); } public void run(){ System.out.println("小狗快快跑......"); } }
Adapter
,这个适配器可以使仿生机器人像狗同样叫,同样跑。public class DogAdapter implements Robot{ Dog dog; public DogAdapter(Dog dog){ //取得要适配的对象的引用 this.dog = dog; } /** * 实现接口中的方法,只须要在相应的方法间进行转换便可完成。 */ public void cry() { System.out.println("机器人模拟狗叫..."); dog.wang(); } public void move() { System.out.println("机器人模拟狗跑..."); dog.run(); } public static void main(String[] args) { BioRobot robot = new BioRobot(); //首先咱们须要一个机器人 Dog dog = new Dog(); //和一只狗 //将这只狗包装到机器人中,使其有点儿像机器人 Robot dogRobot = new DogAdapter(dog); //而后是机器人叫和跑 System.out.println("BioRob cry....."); dogRobot.cry(); dogRobot.move(); } }
运行结果:接口
BioRob cry...... 机器人模拟狗叫... 小狗叫:汪汪...... 机器人模拟狗跑... 小狗快快跑......