适配器模式【大话设计模式DEMO】

适配器模式,将一个类的接口转换成客户希望的另外一个借口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统的数据和行为都正确,但是借口不符时,我们应该考虑用适配器,目的是控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类。

下面一个例子的叙述的是:如何让姚明和其他球员一样在球队里打比赛。实际上其他队员能的,能够实现的东西姚明同样能够做到(接口实现的内容相同,数据和行为都符合要求),只是由文化和语言的差异(接口实现时的表述不符合实际场景),中间要个翻译来让姚明和其他队员配合的天衣无缝。

类设计图:

 

 

代码
class AdapterPattern
{
static void Main(string[] ags)
{
Forwards qf
= new Forwards("巴蒂尔");
Traslate tr
= new Traslate("姚明");
qf.Attack();
tr.Attack();
tr.Defense();
Console.ReadKey();
}
}
/// <summary>
/// 球员
/// </summary>
abstract class Player
{
protected string Name;
public Player(string Player)
{
this.Name = Player;
}
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 ForeignerCenter
{
public string FName;
public void 进攻()
{
Console.WriteLine(
"外籍中锋{0}进攻", FName);
}
public void 防守()
{
Console.WriteLine(
"外籍中锋{0}防守", FName);
}
}

/// <summary>
/// 翻译
/// </summary>
class Traslate : Player
{
ForeignerCenter wjzf
= new ForeignerCenter();

public Traslate(string name)
:
base(name)
{
wjzf.FName
= name;
}

internal ForeignerCenter ForeignerCenter
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}

public override void Attack()
{
wjzf.进攻();
}
public override void Defense()
{
wjzf.防守();
}
}

 

posted @ 2010-03-30 09:33  chunchill  阅读(279)  评论(0编辑  收藏  举报