适配器模式:
适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
结构图:
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 适配模式
{
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 Center : Player
{
public Center(string name) : base(name)
{ }
public override void Attack()
{
Console.WriteLine("中锋{0}进攻", name);
}
public override void Defense()
{
Console.WriteLine("中锋{0}防守", name);
}
}
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);
}
}
class Translator : Player
{
private ForeignCenter w = new ForeignCenter();
public Translator(string name)
: base(name)
{
w.Name = name;
}
public override void Attack()
{
w.进攻();
}
public override void Defense()
{
w.防守();
}
}
class Program
{
static void Main(string[] args)
{
Player b = new Forwards("Sam");
b.Attack();
Player ym = new Translator("姚明");
ym.Attack();
ym.Defense();
Console.ReadKey();
}
}
}
因为姚明是外籍球员,所以无法使用 中锋类,但是通过添加 外籍中锋和翻译者这两个类,使得姚明通过外籍翻译这个类的“进攻”和“防守”方法来进行执行相应的动作。
总结:
适配器模式适合我们前期使用第三方组件和后期维护别人代码的时候使用,因为“两个类所做的事情形同或者相似,但是具有不同的接口去使用它”,所以这时候我们可以使用适配器模式,但是我们不能盲目使用,而是在改动代码代码代价很大的时候使用。