适配器模式: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
生活中也能找到不少适配器的例子。比如有些国家的电压是110v,而我们国家的是220v,这时我们在另外一个国家用本国的电器时就需要一个电源适配器。中国球员刚到NBA打球时,英语不过关,不能与教练、球员沟通,这时也需要一个适配器,而翻译就充当了这个适配器。
我们来实现一下这个场景:
public abstract class Player { protected String name; public Player(String name){ this.name = name; } public abstract void attack(); public abstract void defense(); }
public class Forwards extends Player{ public Forwards(String name) { super(name); } public void attack() { System.out.println("前锋"+this.name+"进攻"); } public void defense() { System.out.println("前锋"+this.name+"防守"); } }
public class Guards extends Player{ public Guards(String name) { super(name); } public void attack() { System.out.println("后卫"+this.name+"进攻"); } public void defense() { System.out.println("后卫"+this.name+"防守"); } }
public class ForeignCenter{ private String name; public void 进攻() { System.out.println("外籍中锋"+this.name+"进攻"); } public void 防守() { System.out.println("外籍中锋"+this.name+"防守"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class Translator extends Player{ private ForeignCenter fc = new ForeignCenter(); public Translator(String name) { super(name); this.fc.setName(name); } public void attack() { fc.进攻(); } public void defense() { fc.防守(); } }
public class Test { public static void main(String[] args) { Player x = new Forwards("xxx"); x.attack(); Player y = new Guards("yyy"); y.defense(); Player z = new Center("zzz"); z.attack(); z.defense(); //适配模式 Player translator = new Translator("www"); translator.attack(); translator.defense(); } }
这就是适配器模式简单实现外籍球员沟通问题。
在软件开发中,也就是系统的数据和行为都正确,但接口不符合时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配,适配器模式主要用于希望复用一些现存的类,但是接口又是与复用环境要求不一致的情况。