3.1 Adapter(适配器)

【返回目录】

某地新建了一座怀旧风格的酒店,一切都按照上个世纪中期的欧美风格来设计。当地一个颇有实力的电器批发商好不容易抢到了一张订单,这家酒店要购进100个怀旧风格的电风扇。批发商找到当地一个颇有规模的电器生产厂家,该厂家正好有一个型号的电风扇是怀旧风格的,但不巧的是,这批电风扇都是两向插头,而酒店需要的是三向的。你认为生产厂家会怎么办,告诉批发商:“对不起,这单生意我们做不了。”或是“去,告诉酒店老板,让他们修改电路,给电风扇准备好一个两向插口。”呢?显然,任何一个正常的老板都知道,最明智的办法就是让电风扇具备一个二转三的转接头,这样的做法是最快也是最有效率的。

Adapter(适配器)模式就是用来解决这样场景的问题的,根据客户的需要转换类的接口,使得原本不兼容的类可以在一起工作。

   1: using System;
   2:  
   3: namespace Autumoon.DesignPatterns.Adapter
   4: {
   5:     public class OriginalFan
   6:     {
   7:         public virtual void WorkWithTwoPins(int pinAmount)
   8:         {
   9:             if (pinAmount != 2)
  10:             {
  11:                 return;
  12:             }
  13:  
  14:             Console.WriteLine("This fan can work with 2 pins.");
  15:         }
  16:     }
  17:  
  18:     public class HotelFan
  19:     {
  20:         public void WorkWithThreePins(int pinAmount)
  21:         {
  22:             if (pinAmount != 3)
  23:             {
  24:                 return;
  25:             }
  26:  
  27:             Console.WriteLine("This fan can work with 3 pins.");
  28:         }
  29:     }
  30:  
  31:     public class FanAdapter : OriginalFan
  32:     {
  33:         private HotelFan hotelFan = new HotelFan();
  34:  
  35:         public override void WorkWithTwoPins(int pinAmount)
  36:         {
  37:             hotelFan.WorkWithThreePins(pinAmount);
  38:         }
  39:     }
  40:  
  41:     public static class FanUsage
  42:     {
  43:         public static void ConnectFan(OriginalFan originalFan)
  44:         {
  45:             originalFan.WorkWithTwoPins(3);
  46:         }
  47:     }
  48: }

从上面的代码我们可以看到,我们有一个原厂生产的两向插头的电风扇OriginalFan类和一个酒店所使用的三项插头的HotelFan类,以及这二者中间所采用的转接头FanAdapter。接下来我们就用这个转接头使得这种原本两向插头的电风扇可以在酒店中使用吧。

   1: static void Main(string[] args)
   2: {
   3:     OriginalFan originalFan = new FanAdapter();
   4:     FanUsage.ConnectFan(originalFan);
   5:  
   6:     Console.ReadLine();
   7: }

Classic Fan

posted @ 2007-12-10 21:43  麦机长  阅读(881)  评论(2编辑  收藏  举报