现在有一个需求:为不懂英语的姚明设置一个翻译
球员父类(集合了球员必备的名字与方法等属性)
package AdapterPattern;
public abstract class Player {
String name;
public Player(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public abstract void attack();
public abstract void defense();
}
球员子类(实例化前中后三类球员)
package AdapterPattern;
public class PlayerSon {
}
class Forwards extends Player{
public Forwards(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("前锋"+name+"进攻");
}
@Override
public void defense() {
// TODO Auto-generated method stub
System.out.println("前锋"+name+"防守");
}
}
class Center extends Player{
public Center(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("中锋"+name+"进攻");
}
@Override
public void defense() {
// TODO Auto-generated method stub
System.out.println("中锋"+name+"防守");
}
}
class Guards extends Player{
public Guards(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("后卫"+name+"进攻");
}
@Override
public void defense() {
// TODO Auto-generated method stub
System.out.println("后卫"+name+"防守");
}
}
外籍球员类(姚明球员实例)
package AdapterPattern;
public class ForeignCenter {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void 进攻(){
System.out.println("外籍中锋"+name+"进攻");
}
public void 防守(){
System.out.println("外籍中锋"+name+"防守");
}
}
翻译者(间接调用姚明的方法,姚明本身不属于player父类,接口不同方法不同,但行为是一样的都是进攻防守)
package AdapterPattern;
public class Translator extends Player {
private ForeignCenter fc = new ForeignCenter();
public Translator(String name) {
super(name);
fc.setName(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
// TODO Auto-generated method stub
fc.进攻();
}
@Override
public void defense() {
// TODO Auto-generated method stub
fc.防守();
}
}
界面类(此类比较简单,主要就是一个间接调用球员的方法而已,理解了翻译者和外籍球员两个类就好了)
package AdapterPattern;
public class Main {
public void printFrame(){
Player p1 = new Forwards("李白");
p1.attack();
Player p2 = new Guards("娜可露露");
p2.attack();
Player p3 = new Translator("姚明");
p3.attack();
}
public static void main(String[] args) {
Main main = new Main();
main.printFrame();
}
}
使用:接口不同的时候使用,维护旧代码的时候使用,解决不同数据库接口问题。