大话设计模式之适配器模式

2014-11-24 00:57:59 · 作者: · 浏览: 0

电源适配器大家都知道啥作用:转化为各个电器自己需要的电压。同理,在此适配器作用类似。

什么时间使用,主要是项目的后期维护,设计时最好不要想使用适配器模式。

图示:

\


下面以姚明在刚到NBA 打篮球需要英语翻译为例:

代码:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;"> class Program { static void Main(string[] args) { Player b = new Forwards("巴蒂尔"); b.Attack(); Player m = new Guards("麦克格蕾丝"); 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(); } //前锋类 class Forwards : Player { public Forwards(string name) : base(name) { } public override void Attack() { //throw new NotImplementedException(); Console.WriteLine("前锋{0} 进攻", name); } public override void Defense() { //throw new NotImplementedException(); Console.WriteLine("前锋{0} 防守",name); } } //中锋类 class Center : Player { public Center(string name) : base(name) { } public override void Attack() { //throw new NotImplementedException(); Console.WriteLine("中锋{0} 进攻", name); } public override void Defense() { //throw new NotImplementedException(); Console.WriteLine("中锋{0} 防守",name); } } //后卫类 class Guards : Player { public Guards(string name) : base(name) { } public override void Attack() { //throw new NotImplementedException(); Console.WriteLine("后卫{0} 进攻", name); } public override void Defense() { //throw new NotImplementedException(); Console.WriteLine("后卫{0} 防守", name); } } //外籍中锋 class ForeignCenter { private string name; public string Name { get { return name; } set { name = value; } } public void Attack() { Console.WriteLine("外籍中锋{0} 进攻",name); } public void Defense() { 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() { //throw new NotImplementedException(); wjzf.Attack(); } public override void Defense() { //throw new NotImplementedException(); wjzf.Defense(); } }
运行结果: