设计模式笔记(十二) —— 适配器模式

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
    使用场合:在双方都不太容易修改的时候再使用适配器模式适配。 

  1. using System;
  2. /**
  3.  * 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
  4.  * 使用场合:在双方都不太容易修改的时候再使用适配器模式适配。
  5.  */
  6. namespace StuDesignMode.Adapter
  7. {
  8.     #region 适配器模式
  9.     interface ITarget
  10.     {
  11.         void Request();
  12.     }
  13.     class Adaptee
  14.     {
  15.         public void SpecificRequest()
  16.         {
  17.             Console.WriteLine("特殊请求!");
  18.         }
  19.     }
  20.     class Adapter : ITarget
  21.     {
  22.         private Adaptee _adaptee = new Adaptee();
  23.         public void Request()
  24.         {
  25.             _adaptee.SpecificRequest();
  26.         }
  27.     }
  28.     #endregion
  29.     #region 示例代码
  30.     abstract class AbsPlayer
  31.     {
  32.         public string Name { getset; }
  33.         public AbsPlayer(string name)
  34.         {
  35.             this.Name = name;
  36.         }
  37.         //进攻
  38.         public abstract void Attack();
  39.         //防守
  40.         public abstract void Defense();
  41.     }
  42.     //前锋
  43.     class Forwards : AbsPlayer
  44.     {
  45.         public Forwards(string name) : base(name) { }
  46.         public override void Attack()
  47.         {
  48.             Console.WriteLine("前锋{0}进攻!",this.Name);
  49.         }
  50.         public override void Defense()
  51.         {
  52.             Console.WriteLine("前锋{0}防守!"this.Name);
  53.         }
  54.     }
  55.     //中锋
  56.     class Center : AbsPlayer
  57.     {
  58.         public Center(string name) : base(name) { }
  59.         public override void Attack()
  60.         {
  61.             Console.WriteLine("中锋{0}进攻!",this.Name);
  62.         }
  63.         public override void Defense()
  64.         {
  65.             Console.WriteLine("中锋{0}防守!"this.Name);
  66.         }
  67.     }
  68.     //后卫
  69.     class Guaids : AbsPlayer
  70.     {
  71.         public Guaids(string name) : base(name) { }
  72.         public override void Attack()
  73.         {
  74.             Console.WriteLine("后卫{0}进攻!"this.Name);
  75.         }
  76.         public override void Defense()
  77.         {
  78.             Console.WriteLine("后卫{0}防守!"this.Name);
  79.         }
  80.     }
  81.     //外籍中锋
  82.     class ForeignCenter
  83.     {
  84.         public string Name { getset; }
  85.         public void 进攻()
  86.         { 
  87.            Console.WriteLine("外籍中锋{0}进攻!",this.Name);
  88.         }
  89.         public  void 防守()
  90.         {
  91.             Console.WriteLine("外籍中锋{0}防守!"this.Name);
  92.         }
  93.     }
  94.     //翻译(适配器)
  95.     class Translator : AbsPlayer
  96.     {
  97.         private ForeignCenter _fgCenter;
  98.         public Translator(string name)
  99.             : base(name)
  100.         {
  101.             _fgCenter = new ForeignCenter();
  102.             _fgCenter.Name = name;
  103.         }
  104.         public override void Attack()
  105.         {
  106.             _fgCenter.进攻();
  107.         }
  108.         public override void Defense()
  109.         {
  110.             _fgCenter.防守();
  111.         }
  112.     }
  113.     //测试
  114.     class ClientTest
  115.     {
  116.         static void Main(string[] args)
  117.         {
  118.             AbsPlayer SF = new Forwards("巴蒂尔");
  119.             AbsPlayer SG = new Guaids("麦迪");
  120.             AbsPlayer C = new Center("霍华德");
  121.             AbsPlayer FC = new Translator("姚明");
  122.             SF.Attack();
  123.             SG.Attack();
  124.             C.Attack();
  125.             FC.Attack();
  126.             SF.Defense();
  127.             SG.Defense();
  128.             C.Defense();
  129.             FC.Defense();
  130.             Console.WriteLine();
  131.         }
  132.     }
  133.     #endregion
  134. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值