1 两个类所做的事情相同或相似,但是具有不同的接口,如果想要使用另外一个接口的实现类,可考虑使用适配器模式。
代码结构如下:
如下代码在一个接口的实现类中引用另外一个类、
抽象父类:
public abstract class Player {
protected String name;
public Player(String name) {
this.name = name;
}
public abstract void attack();
public abstract void defense();
}
两个子类:
public class CenterPlayer extends Player {
public CenterPlayer(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 + "防守");
}
}
public class ForwardPlayer extends Player {
public ForwardPlayer(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 + "防守");
}
}
适配器:
public class Translator extends Player {
private ForeignPlayer foreignPlayer=new ForeignPlayer();
public Translator(String name) {
super(name);
foreignPlayer.setName(name);
}
@Override
public void attack() {
// TODO Auto-generated method stub
foreignPlayer.attack();
}
@Override
public void defense() {
// TODO Auto-generated method stub
foreignPlayer.defense();
}
}
需要适配的类:
public class ForeignPlayer{
private String name;
public void attack() {
// TODO Auto-generated method stub
System.out.println("外籍:"+name+"进攻");
}
public void defense() {
// TODO Auto-generated method stub
System.out.println("外籍:"+name+"防守");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
public class TextMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Player player=new Translator("姚明");
player.attack();
player.defense();
}
}
参考《大话设计模式》