设计模式(3)――结构性模式 (一)

2014-11-24 02:43:10 · 作者: · 浏览: 7

在结构型模式中包含七种模式:适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式、外观模式。


6. 适配器模式

将一个类的接口转换为客户希望的一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。相当于一个翻译的作用(就像姚明开始不会英语在国外打球,需要一个翻译作为适配器)


UML图:

\


代码

view plaincopy to clipboardprint //17.4找个篮球翻译当适配器——中间调节作用
namespace 适配器
{
class Class1
{
static void Main(string[] args)
{
Player b = new ForWards("巴蒂尔");
b.Attack();

Player m = new Guards("麦蒂");
m.Attack();

//Player ym = new Center("姚明");

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();
}
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 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 //相当于姚明的位置,他打的是中国的球
{
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 wjzf = new ForeignCenter(); //外籍中锋

public Translator(string name)
: base(name)
{
wjzf.Name = name;
}

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

public override void Defense()
{
wjzf.进攻();
}
}
}
//17.4找个篮球翻译当适配器——中间调节作用
namespace 适配器
{
class Class1
{
static void Main(string[] args)
{
Player b = new ForWards("巴蒂尔");
b.Attack();

Player m = new Guards("麦蒂");
m.Attack();

//Player ym = new Center("姚明");

Player ym = new Translator("姚明"); //外籍中锋
ym.Attack();
ym.Defense();
Console.Read();
}
}
abstract class Player //球员
{
protected string name;
public Player(string name)
{
this.n