一、 问题描述
球场上有前锋、中锋、后卫,其中某队员是外籍球员,他不能听懂进攻(attack)或防御(defend)指示(外籍球员的进攻和防御与其他队员接口不同),需要有一个翻译从旁指挥(翻译充当适配器)。
二、 完成如下题目要求
-
画出静态图
-
写出采用该设计模式的好处
将一个类的接口转换成另一个接口,让原本不可以兼容的类可以兼容
- 编写代码
package BasketBallPlayer2;
/**
* 主方法
* @author Administrator
*
*/
public class Main {
public static void main(String[] args) {
Player playerA = new Forward("A");
playerA.attack();
Player playerB = new Forward("B");
playerB.defense();
Player playerC = new Translator("C");
playerC.attack();
}
}
package BasketBallPlayer2;
//Player的抽象
public abstract class Player {
protected String name;
public Player(String name) {
super();
this.name = name;
}
public abstract void attack();
public abstract void defense();
}
package BasketBallPlayer2;
//外援中锋
public class ForeignCenter {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void FCAttack() {
System.out.println("外援中锋"+name+"进攻");
}
public void FCDefense() {
System.out.println("外援中锋"+name+"防守");
}
}
package BasketBallPlayer2;
//前锋
public class Forward extends Player {
public Forward(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
System.out.println("前锋"+name+"进攻");
}
@Override
public void defense() {
System.out.println("前锋"+name+"防守");
}
}
package BasketBallPlayer2;
//后卫
public class Guard extends Player {
public Guard(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
System.out.println("后卫"+name+"进攻");
}
@Override
public void defense() {
System.out.println("后卫"+name+"防守");
}
}
package BasketBallPlayer2;
//翻译
public class Translator extends Player {
ForeignCenter abc = new ForeignCenter();
public Translator(String name) {
super(name);
abc.setName(name);
}
@Override
public void attack() {
abc.FCAttack();
}
@Override
public void defense() {
abc.FCDefense();
}
}