zoukankan      html  css  js  c++  java
  • 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

    转载请注明出处。版权所有©1983-2021 麦机长,保留所有权利。
  • 相关阅读:
    A Bug's Life-----poj2492(关系并查集)
    食物链--poj1182(并查集含有关系)
    How Many Answers Are Wrong----hdu3038(并查集)
    Parity game---poj1733
    使用FFmpeg类库实现YUV视频序列编码为视频
    JNA调用DLL函数遇到的几个问题
    从一个MFC工程移植对话框类到另一个MFC工程
    X264 输出的统计值的含义(X264 Stats Output)
    毕业生必知二三事。给即将毕业的师弟师妹看看,很有用的~~~~
    网络视频传输的服务质量(QoS)
  • 原文地址:https://www.cnblogs.com/Autumoon/p/989931.html
Copyright © 2011-2022 走看看