问题描述
对于刚去NBA打球的姚明,需要随时有一个翻译在身边。仿照该情形实现适配器模式。
代码实现
运动员抽象类
public abstract class Player
{
public Player(string name)
{
mName = name;
}
protected string mName;
public abstract void Attack();
public abstract void Defense();
}
篮球运动员具体类
public class Forwards : Player
{
public Forwards(string name) : base(name) { }
public override void Attack()
{
Console.WriteLine($"前锋 {mName} 进攻");
}
public override void Defense()
{
Console.WriteLine($"前锋 {mName} 防守");
}
}
public class Guards : Player
{
public Guards(string name) : base(name) { }
public override void Attack()
{
Console.WriteLine($"后卫 {mName} 进攻");
}
public override void Defense()
{
Console.WriteLine($"后卫 {mName} 防守");
}
}
Adaptee类
public class ForeignCenter
{
private string name;
public string mName
{
get { return name; }
set { name = value; }
}
public void attack()
{
Console.WriteLine($"外籍中锋 {name} 进攻");
}
public void defense()
{
Console.WriteLine($"外籍中锋 {name} 防守");
}
}
适配类
public class Translator : Player
{
private ForeignCenter wjzf = new ForeignCenter();
public Translator(string name) : base(name)
{
wjzf.mName = name;
}
public override void Attack()
{
wjzf.attack();
}
public override void Defense()
{
wjzf.defense();
}
}
Main方法:
internal class Program
{
static void Main(string[] args)
{
Player a = new Forwards("巴蒂尔");
a.Attack();
Player m = new Guards("麦克格雷迪");
m.Attack();
Player yaoming = new Translator("姚明");
yaoming.Attack();
yaoming.Defense();
}
}
执行结果
前锋 巴蒂尔 进攻
后卫 麦克格雷迪 进攻
外籍中锋 姚明 进攻
外籍中锋 姚明 防守