适配器模式(Adapter)

适配器模式(Adapter)

          将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

何时使用适配器模式?

系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器。

适配器的应用

        在.NET中有一个类库已经实现的适配器——DataAdapter。用作DataSet和数据源之间的适配器以便检索和保存数据。DataAdapter通过映射Fill和Update来提供这一适配器。开发系统需要使用第三方开发组件,可以考虑适配器模式解决接口不同的问题。

实例——NBA姚明需要翻译


代码实现

球员、前锋、中锋、后卫

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //球员抽象类 :进攻、防守  
  2.     abstract class Player  
  3.     {  
  4.         protected string name;  
  5.         public Player (string name)  
  6.         {  
  7.             this.name = name;  
  8.         }  
  9.         public abstract void Attack();  
  10.         public abstract void Defense();  
  11.     }  
  12.   
  13.     //前锋、中锋、后卫类  
  14.     class Forwards:Player  
  15.     {  
  16.         public Forwards(string name) : base(name) { }  
  17.   
  18.         public override void Attack()  
  19.         {  
  20.             Console.WriteLine("前锋{0}进攻",name );   
  21.         }  
  22.         public override void Defense()  
  23.         {  
  24.             Console.WriteLine("前锋{0}防守",name );  
  25.         }  
  26.     }……其余类省略  
外籍中锋

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //外籍中锋  
  2.    class ForeignCenter  
  3.    {  
  4.        private string name;  
  5.        public string Name  
  6.        {  
  7.            get { return name; }  
  8.            set { name = value; }  
  9.        }  
  10.        public void 进攻()  
  11.        {  
  12.            Console.WriteLine("外籍中锋{0}进攻",name);  
  13.        }  
  14.        public void 防守()  
  15.        {  
  16.            Console.WriteLine("外籍中锋{0}防守", name);  
  17.        }  
  18.    }  
翻译者

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //翻译者类  
  2.    class Translator:Player  
  3.    {  
  4.        private ForeignCenter wjzf = new ForeignCenter();  
  5.        public Translator(string name)  
  6.            : base(name)  
  7.        {  
  8.            wjzf.Name = name;  
  9.        }  
  10.        public override void Attack()  
  11.        {  
  12.            wjzf.进攻();  
  13.        }  
  14.        public override void Defense()  
  15.        {  
  16.            wjzf.防守();  
  17.        }  
  18.    }  
客户端

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. Player ym = new Translator("姚明");  
  2.         ym.Attack();  
  3.         ym.Defense();  
  4.         Console.Read();  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值