好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#实例解析适配器设计模式

C#实例解析适配器设计模式

C#实例解析适配器设计模式

今天在CSDN上看到一个园子里的朋友写了一篇 ASP.NET的适配器设计模式 的文章。其中提到了把输入的电压转换成灯泡适合的电压,这样才能使灯泡正常工作。正巧,我也在学习设计模式,其中翻看了一下秦小波写的《设计模式与禅》这本书,其中提到了设计模式的定义为:

将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作。

适配器模式又叫变压器模式,也叫包装模式。

这里作者举得例子并没有实现把一个接口或类转换到另外一个可以使用的类,仅仅是把输入参数做了判断,这是不是适配器模式我不予置评,下面贴出我实现的适配器模式。

我们知道,中国的电压是220V,而日本的电压为110V,我们中国生产的电灯泡一般额定电压为220V,如果想要这个灯泡在日本能够正常工作就必须使用一个适配器,把110V电压转换成220V电压。

定义接口代码如下:

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   HelloWorld
{
      ///   <summary> 
     ///   中国电接口
      ///   </summary> 
     public   interface   IChinaElectricity
    {
          ///   <summary> 
         ///   电压
          ///   </summary> 
         ///   <returns></returns> 
         int   Voltage();
    }
      ///   <summary> 
     ///   日本电接口
      ///   </summary> 
     public   interface   IJapanElectricity
    {
          ///   <summary> 
         ///   电压
          ///   </summary> 
         ///   <returns></returns> 
         int   Voltage();
    }
      ///   <summary> 
     ///   灯接口
      ///   </summary> 
     public   interface   IChinaLight
    {
          ///   <summary> 
         ///   发光
          ///   </summary> 
         ///   <returns></returns> 
         string  Light( int   voltage);
    }
} 


定义的类如下:

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   HelloWorld
{
      public   class   ChinaElectricity : IChinaElectricity
    {
          public   int   Voltage()
        {
              return   220  ;
        }
    }

      public   class   JapanElectricity : IJapanElectricity
    {
          public   int   Voltage()
        {
              return   110  ;
        }
    }

      public   class   ChinaLight : IChinaLight
    {
          ///   <summary> 
         ///   发光
          ///   </summary> 
         ///   <returns></returns> 
         public   string  Light( int   voltage)
        {
              if  (voltage ==  220  )
            {
                  return   "  我发光啦....  "  ;
            }
              else  
            {
                  return  ( "  电压不正确,无法正常工作...  "  );
            }
        }
    }
      ///   <summary> 
     ///   定义一个电压适配器
      ///   </summary> 
     public   class   ElectricityAdapter : IChinaElectricity
    {
          private   int  voltage =  0  ;
          private  IJapanElectricity iJElectricity =  null  ;
        
          public   ElectricityAdapter(IJapanElectricity _baseElectricity)
        {
            iJElectricity  =  _baseElectricity;
            voltage  =  this  .iJElectricity.Voltage();
        }
          public   int   Voltage()
        {
              return  voltage +  110  ;
        }
    }
} 

这里面我们定义了一个适配器的类,把日本电压适配成中国电压,这样才能够使灯泡正常工作。代码如下:

         static   void  Main( string  [] args)
        {

              //  初始化一个中国电灯 
            IChinaLight iCLight =  new   ChinaLight();
              //  初始化中国的电 
            IChinaElectricity iCElectricity =  new   ChinaElectricity();
              //  初始化日本电 
            IJapanElectricity iJElectricity = new   JapanElectricity();

              //  使用适配器 
            IChinaElectricity iCAElectricity =  new   ElectricityAdapter(iJElectricity);

              //  电压正确电灯发光 
             Console.WriteLine(iCLight.Light(iCElectricity.Voltage()));

              //  使用电压适配器进行适配 
             Console.WriteLine(iCLight.Light(iCAElectricity.Voltage()));

              //  电压不正确,电灯产生异常 
             Console.WriteLine(iCLight.Light(iJElectricity.Voltage()));
            
        } 

通过适配器模式的定义可以知道,其实适配器模式无非是把一种已经无法修改,或是修改成本较高的源角色通过适配角色转换成目标角色,这样整个业务体系才能够在代价最小的情况下进行正常运行。

适配器模式的优点:

适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就行。

增加了类的透明性。 提高了类的复用度。 灵活性非常好。

适配器模式的使用场景:

适配器应用场景只要记住一点就足够了:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,只需要一个已有或新建立的类,但这个类又不符合系统的接口,这个时候使用适配器模式比修改已存在的类代价要小的多。

转载请保留文章来源: http://www.cnblogs.com/lifeil/archive/2013/02/25/2932178.html

 

 

分类:  设计模式

标签:  C# ,  设计模式

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C#实例解析适配器设计模式的详细内容...

  阅读:40次