将一个类的接口转换成客户希望的另外一个接口。
系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器。
//定义一个player抽象类
abstract class Player
{
protected string name;
public Player(string name)
{
this.name = name;
}
public abstract void Attack();
public abstract void Defense();
}
//前锋
class Forwards : Player
{
public Forwards(string name) : base(name)
{
}
public override void Attack()
{
Console.WriteLine("前锋{0}进攻", name);
}
public override void Defense()
{
Console.WriteLine("前锋{0}防守", name);
}
}
//后卫
class Guards : Player
{
public Guards(string name) : base(name)
{
}
public override void Attack()
{
Console.WriteLine("后卫{0}进攻", name);
}
public override void Defense()
{
Console.WriteLine("后卫{0}防守", name);
}
}
//外籍中锋
class ForeignCenter
{
public string Name { get; set; }
public void 进攻()
{
Console.WriteLine("外籍中锋{0}进攻",Name);
}
public void 防守()
{
Console.WriteLine("外籍中锋{0}防守", Name);
}
}
//外籍中锋翻译类(即适配器类)
class Translator : Player
{
ForeignCenter wjzf = new ForeignCenter();
public Translator(string name) : base(name)
{
wjzf.Name = name;
}
public override void Attack()
{
wjzf.进攻();
}
public override void Defense()
{
wjzf.防守();
}
}
调用:
Player f = new Forwards("巴蒂尔");
f.Attack();
Player g = new Guards("麦克格雷迪");
g.Attack();
Player p = new Translator("姚明");
p.Attack();//即外籍中锋自己的进攻方法
p.Defense();