适配器模式(Adapter)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
何时使用适配器模式?
系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器。
适配器的应用
在.NET中有一个类库已经实现的适配器——DataAdapter。用作DataSet和数据源之间的适配器以便检索和保存数据。DataAdapter通过映射Fill和Update来提供这一适配器。开发系统需要使用第三方开发组件,可以考虑适配器模式解决接口不同的问题。
实例——NBA姚明需要翻译
![](https://img-blog.csdn.net/20160618083907213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码实现
球员、前锋、中锋、后卫
-
- 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 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.防守();
- }
- }
客户端
- Player ym = new Translator("姚明");
- ym.Attack();
- ym.Defense();
- Console.Read();