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

转载 2013年12月03日 16:30:30

今天在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

大话设计模式—适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口...
  • lmb55
  • lmb55
  • 2016年03月29日 19:47
  • 1699

最常用的设计模式---适配器模式(C++实现)

sdfsfd
  • lh844386434
  • lh844386434
  • 2014年01月06日 22:24
  • 2007

一个示例让你明白适配器模式

本文讨论适配器模式。适配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器。为了举这个例子,我还特意去京东上搜了一下电源转换器,确实看到了很多...
  • brave2211
  • brave2211
  • 2014年01月26日 00:08
  • 41750

C#设计模式—适配器模式应用实例

  • 2016年06月13日 23:08
  • 4KB
  • 下载

设计模式 - 适配器模式(C++实例)

  • 2012年11月21日 14:12
  • 7KB
  • 下载

C#设计模式-适配器模式工程源代码

  • 2017年02月24日 18:23
  • 28KB
  • 下载

C# 设计模式-适配器(Adapter)

为了使得接口不兼容的类可以在一起工作,使用适配器模式分为两类适配器: 类适配器:在C# 中,适配器继承Adaptee(被适配者),实现Target(目标)接口。该适配器可重定义Adaptee的部分行为...
  • m0_37862405
  • m0_37862405
  • 2017年12月27日 19:03
  • 9

【超全整理】C#语法解析、设计模式和数据库实例

  • 2016年06月22日 14:05
  • 8.77MB
  • 下载

C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) (Level 300)

  • 2008年09月13日 15:54
  • 7.2MB
  • 下载

C#面向对象设计模式纵横谈\7 结构型模式Adapter 适配器模式.zip

  • 2009年12月20日 12:52
  • 8.61MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#实例解析适配器设计模式
举报原因:
原因补充:

(最多只允许输入30个字)