• 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 麦机长,保留所有权利。
  • 相关阅读:
    获取农历日期
    图片上传代码(C#)
    ASP.net使用技术总结(1)GridView控件的单击处理
    JavaScript使用小技巧:IE8的关闭处理
    FrameSet左右收缩编码
    哈哈,开心!今天注册开通了 弟弟Kernel 的网志
    设计模式简介
    Delphi字符串、PChar与字符数组之间的转换
    C++中数组参数详解
    1、简单工厂模式
  • 原文地址:https://www.cnblogs.com/Autumoon/p/989931.html
Copyright © 2020-2023  润新知