【设计模式】- 适配器模式
1.适配器模式:将一个类的接口转换为客户希望的另外一个接口。Adapter 模式是原来由于接口不兼容而不能一起工作的那些类可以一起工作。
2.形象的例子:姚明刚去NBA需要一个翻译,这个翻译就充当一个适配器的角色。在.NET体系中,经常使用的DataAdapter就是这个模式。
3.适配器模式一般情况下,是在软件后期维护时、或与三方客户对接时候;要求客户修改类、调整己方系统已存在的接口或类比较费劲时,可以考虑使用适配器设计模式,添加一个新的类去适应客户需求。
4.适配模式结构图

5.球员UML图

6. 具体代码实现
namespace AdapterPattern
{
/// <summary>
/// 球员
/// </summary>
public abstract class Player
{
protected string _name;
protected Player(string name)
{
this._name = name;
}
public abstract void Attack();
public abstract void Defense();
}
/// <summary>
/// 前锋
/// </summary>
public class Striker : Player
{
public Striker(string name) : base(name)
{
}
public override void Attack()
{
Console.WriteLine("前锋{0}进攻",_name);
}
public override void Defense()
{
Console.WriteLine("前锋{0}防守", _name);
}
}
/// <summary>
/// 中锋
/// </summary>
public 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>
public class Defender : Player
{
public Defender(string name) : base(name)
{
}
public override void Attack()
{
Console.WriteLine("后卫{0}进攻", _name);
}
public override void Defense()
{
Console.WriteLine("后卫{0}防守", _name);
}
}
}
namespace AdapterPattern
{
/// <summary>
/// 外籍中锋
/// </summary>
public class ForeignCenter
{
private string name;
public string Name { get => name; set => name = value; }
public void 进攻()
{
Console.WriteLine("外籍中锋{0}进攻",Name);
}
public void 防守()
{
Console.WriteLine("外籍中锋{0}防守", Name);
}
}
/// <summary>
/// 外籍中锋翻译(适配器)
/// </summary>
public class Adapter : Player
{
ForeignCenter foreignCenter;
public Adapter(string name) : base(name)
{
foreignCenter = new ForeignCenter();
foreignCenter.Name = name;
}
public override void Attack()
{
foreignCenter.进攻();
}
public override void Defense()
{
foreignCenter.防守();
}
}
}
class Program
{
static void Main(string[] args)
{
Player s = new Striker("麦迪");
Player c = new Center("姚明");
Player d = new Defender("弗朗西斯");
s.Attack();
c.Attack();
d.Attack();
Console.WriteLine("-----------------------------------------------------");
Player s1 = new Striker("麦迪");
Player c1 = new Adapter("姚明");
Player d1 = new Defender("弗朗西斯");
s1.Attack();
c1.Attack();
d1.Attack();
Console.ReadKey();
}
}

浙公网安备 33010602011771号