适配器模式案例

题目:

现有系统中有目标类AmericanPlayer,其中包含protected的属性球员姓名name和满足用户需求的接口Attack和Defense

在现有系统中AmericanPlayer细化为Forward、Center、Guard三类,都具体实现了接口Attack和Defense。现引入第三方

类ForeignCenter,功能与现有系统的Forward、Center、Guard类似,jingong功能类似于Attack,fangshou功能类似于Defense。

现统一接口为AmericanPlayer中的Attack和Defens。请使用adapter模式实现

(提示:这个现实生活的实例中,翻译Translator就相当于adapter的功能,所有Attack、Defense、jingong、fangshou用输出语句表示即可)

类图:



代码:


package Adapter;

abstract class AmericanPlayer
{
    protected String name;
    AmericanPlayer(String name){ this.name = name;}
    abstract void Attack();
    abstract void Defense();
};

class Forward extends AmericanPlayer
{
    Forward(String name){super(name);}
    public void Attack(){System.out.println("Forward" + this.name + " attack");}
    public void Defense(){ System.out.println("Forward" + this.name + " defend");}
};

class Center extends AmericanPlayer
{
    Center(String name){super(name);}
    public void Attack(){System.out.println("Center" + this.name + " attack");}
    public void Defense(){ System.out.println("Center" + this.name + " defend");}
};

class Guard extends AmericanPlayer
{
    Guard(String name){super(name);}
    public void Attack(){System.out.println("Guard" + this.name + " attack");}
    public void Defense(){ System.out.println("Guard" + this.name + " defend");}
};

class ForeignCenter
{
    private String name;
    ForeignCenter(String name){ this.name = name; }
    public void 进攻()
    {
        System.out.println("中国中锋" + this.name + " 进攻");
    }
    public void 防守()
    {
        System.out.println("中国中锋" + this.name + " 防守");
    }
};

class Translator extends AmericanPlayer
{
    private ForeignCenter yaoming;
    Translator(String name)
    {
        super(name);
        yaoming = new ForeignCenter(name);
    }

    public void Attack(){ yaoming.进攻(); }
    public void Defense(){ yaoming.防守(); }
};


public class TranslatorForYao {
    public static void main(String[] args){
        AmericanPlayer b = new Forward("巴蒂尔");
        AmericanPlayer m = new Guard("麦克格雷迪");
        AmericanPlayer y = new Translator("姚明");
        b.Attack();

        m.Attack();

        y.Attack();
        y.Attack();
    }
}



结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值