适配器模式
定义:将一个类的接口转换为客户希望的另一个接口,Adapter模式使得原本由于接口不兼容二不能一起工作的哪些类可以一起工作。
类图
案例
Player.java
package shejimoshi.me.dahua.visitor.Adapter;
public abstract class Player {
//??
protected String name;
Player(String name)
{
this.name=name;
}
public abstract void Attack();
public abstract void Defense();
}
class Forwards extends Player{
Forwards(String name) {
super(name);
}
@Override
public void Attack() {
System.out.println("Forward=="+this.name+"==attack");
}
@Override
public void Defense() {
System.out.println("Forward=="+this.name+"==defense");
}
}
class Center extends Player{
Center(String name) {
super(name);
}
@Override
public void Attack() {
System.out.println("center=="+this.name+"==attack");
}
@Override
public void Defense() {
System.out.println("center=="+this.name+"==defense");
}
}
class Guards extends Player{
Guards(String name) {
super(name);
}
@Override
public void Attack() {
System.out.println("guard=="+this.name+"==attack");
}
@Override
public void Defense() {
System.out.println("guard=="+this.name+"==defense");
}
}
ForeignCenter
package shejimoshi.me.dahua.visitor.Adapter;
public class ForeignCenter
{
private String name;
public ForeignCenter() {
}
public ForeignCenter(String name) {
this.name = name;
}
public void ForeignAtack()
{
System.out.println("ForeignCenter=="+name+"==ForeignAtack");
}
public void ForeignDefense()
{
System.out.println("ForeignDefense=="+name+"==ForeignDefense");
}
}
Adapter
package shejimoshi.me.dahua.visitor.Adapter;
public class Adapter extends Player {
public Adapter(String name) {
super(name);
}
private ForeignCenter wjzf=new ForeignCenter(name);
@Override
public void Attack() {
wjzf.ForeignAtack();
}
@Override
public void Defense() {
wjzf.ForeignDefense();
}
}
Client
package shejimoshi.me.dahua.visitor.Adapter;
public class Client {
public static void main(String[] args) {
Player bter= new Forwards("巴蒂尔");
Player ym=new Adapter("姚明");
Player mkgld=new Guards("麦克格雷迪");
bter.Attack();
ym.Attack();
mkgld.Defense();
}
}
运行结果
Forward==巴蒂尔==attack
ForeignCenter==姚明==ForeignAtack
guard==麦克格雷迪==defense