一、定义
适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使
得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
二、代码示例
-
需求
姚明初次来到外国,不会说英文,听不懂英文,但是他应该如何和队友或者教练交流呢?答案很明显,需要一个第三者翻译来传达。这也符合我们的设计模式中的适配器模式。
-
代码实现
抽象运动员:
public abstract class Player { private String name; public Player(String name) { this.name = name; } public String getName() { return name; } public abstract void attack(); public abstract void defense(); }
具体球员实现类:
public class Forwards extends Player { public Forwards(String name) { super(name); } @Override public void attack() { System.out.println("前锋" + this.getName() + "进攻!"); } @Override public void defense() { System.out.println("前锋" + this.getName() + "防守!"); } }
public class Centers extends Player { public Centers(String name) { super(name); } @Override public void attack() { System.out.println("中锋" + this.getName() + "进攻!"); } @Override public void defense() { System.out.println("中锋" + this.getName() + "防守!"); } }
public class Guards extends Player { public Guards(String name) { super(name); } @Override public void attack() { System.out.println("后卫" + this.getName() + "进攻!"); } @Override public void defense() { System.out.println("后卫" + this.getName() + "防守!"); }
}
外籍球员:
public class ForeignCenter { private String name; public ForeignCenter() { } public void setName(String name) { this.name = name; } public void jingong() { System.out.println("外籍中锋" + this.name + "进攻!"); } public void fangshou() { System.out.println("外籍中锋" + this.name + "防守!"); } }
翻译类(重点):
public class Translator extends Player { private ForeignCenter foreignPlayer = new ForeignCenter(); public Translator(String name) { super(name); foreignPlayer.setName(name); } @Override public void attack() { foreignPlayer.jingong(); } @Override public void defense() { foreignPlayer.fangshou(); }
}
测试类:
public class Test { public static void main(String[] args) { Player bde = new Forwards("巴蒂尔"); bde.attack(); Player mkgld = new Guards("麦克格雷迪"); mkgld.defense(); Player ym = new Translator("姚明"); ym.defense(); ym.attack(); } }