具体实现:
class Program
{
static void Main(string[] args)
{
Player b = new Forwards("A");
b.Attack();
Player m = new Guards("B");
m.Attack();
//通过翻译,姚明知道了需要做的事情
Player ym = new Translator("姚明");
ym.Attack();
ym.Defense();
Console.Read();
}
abstract class Player
{
protected string name;
public Player(string name)
{
this.name = name;
}
public abstract void Attack();
public abstract void Defense();
}
/// <summary>
/// 前锋
/// </summary>
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);
}
}
/// <summary>
/// 中锋
/// </summary>
class Center : Player
{
public Center(string name) : base(name)
{
}
public override void Attack()
{
Console.WriteLine("中锋{0} 进攻", name);
}
public override void Defense()
{
Console.WriteLine("中锋{0} 防守", name);
}
}
/// <summary>
/// 后卫
/// </summary>
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);
}
}
/// <summary>
/// 翻译是继承于运动员的,因为他需要直接理解教练的意思
/// 但是他实际需要传达的是外籍球员,所以他调用的是外籍球员所理解的方法=>也就是翻译的作用
/// </summary>
class Translator : Player
{
private ForeignCenter fc = new ForeignCenter();
public Translator(string name) : base(name)
{
fc.Name = name;
}
public override void Attack()
{
fc.进攻();
}
public override void Defense()
{
fc.防守();
}
}
/// <summary>
/// 作为外籍球员,他有自己的姓名和进攻防守方式等
/// 其他的事情交给翻译就好了
/// </summary>
class ForeignCenter
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public void 进攻()
{
Console.WriteLine("外籍中锋{0} 进攻", name);
}
public void 防守()
{
Console.WriteLine("外籍中锋{0} 防守", name);
}
}
}
适配器模式的优缺点
像之前提到的适配器能在后期维护的时候起到很大的作用,能在开发新的功能的时候保护原来软件的稳定性,但是初期的时候还是能避免就尽量避免吧!










