适配器模式:将一个类的接口转换成客户需要另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。【继承+组合 】
public abstract class Target {
public void request() {
System.out.println("普通请求!");
}
}
public class Adapter extends Target {
private Adaptee adaptee = new Adaptee();
@Override
public void request() {
adaptee.specificRequest();
}
}
public class Adaptee {
public void specificRequest() {
System.out.println("特殊的请求!");
}
}
public class AdapterClient {
public static void main(String[] args) {
Target target;
target = new Adapter();
target.request();
}
}
案例 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 Center extends Player {
public Center(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("中锋 " + name + " 进攻");
}
@Override
public void defense() {
System.out.println("中锋 " + name + " 防守");
}
}
public class Forwards extends Player {
public Forwards(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("前锋 " + name + " 进攻");
}
@Override
public void defense() {
System.out.println("前锋 " + name + " 进攻");
}
}
public class Guards extends Player {
public Guards(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("后卫 " + name + " 进攻");
}
@Override
public void defense() {
System.out.println("后卫 " + name + " 防守");
}
}
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 + " 防守");
}
}
public class Translator extends Player {
private ForeignCenter foreignCenter = new ForeignCenter();
public Translator(String name) {
super(name);
foreignCenter.setName(name);
}
@Override
public void attack() {
foreignCenter.进攻();
}
@Override
public void defense() {
foreignCenter.防守();
}
}
public class Client {
public static void main(String[] args) {
Player k = new Guards("科比");
k.attack();
Player m = new Forwards("麦迪");
m.attack();
Player y = new Translator("姚明");
y.attack();
y.defense();
}
}