zoukankan      html  css  js  c++  java
  • C#设计模式(7)——适配器模式

    1.适配器模式介绍

      适配器模式的作用是将一个类的接口,转换成客户端希望的另外一种接口,适配器作为原始接口(我们的类中本来具有的功能)和目标接口(客户端希望的功能)之间的桥梁。举个例子:我们知道安卓数据线是不能给苹果手机充电的,但是我们没有苹果数据线,所以只能使用安卓数据线给苹果手机充电,这时怎么解决呢?通过一个转换头就可以了,这个转换头就是一个适配器。在适配器模式中:安卓数据线是我们现有的类,充电是安卓数据线的功能,但是充电功能就是因为接口不兼容所以不适应新环境(给苹果手机充电),转换头作为苹果手机和安卓数据线之间的桥梁,让原有的充电功能使用于新环境(给苹果手机充电)。

    适配器模式有两种类型:类适配器和对象适配器,类适配器通过多重继承实现接口的匹配,C#不支持多重继承,我们不考虑。我们主要介绍对象适配器。首先说明介绍适配器模式的三个角色:

      Adaptee:初始角色,实现了我们想要使用的功能,但是接口不匹配

      Target:目标角色,定义了客户端期望的接口

      Adapter:适配器角色,实现了目标接口。实现目标接口的方法是:内部包含一个Adaptee的对象,通过这个对象调用Adaptee的原有方法实现目标接口。(注:这里说的是对象适配器)

    下边我们就以安卓数据线给苹果手机充电为例,介绍适配器模式的用法,代码十分简单

    三种角色:

        /// <summary>
        /// 安卓数据线,adaptee角色
        /// </summary>
        public class AndroidLine
        {
            public void AndroidCharge()
            {
                Console.WriteLine("安卓数据线充电....");
            }
        }
    
        /// <summary>
        /// 苹果手机充电接口,目标接口
        /// </summary>
        public interface IApplyCharge
        {
            void ApplyChange();
        }
    
        /// <summary>
        /// 苹果适配器 适配器角色
        /// </summary>
        public class ApplyAdapter : IApplyCharge
        {
            AndroidLine androidLine = new AndroidLine();//适配器内部包含一个Adaptee对象
            public void ApplyChange()
            {
                androidLine.AndroidCharge();//客户端调用时,表面上是用的是ApplyChange方法,本质还是用的AndroidCharge方法
            }
        }

    客户端调用:

        class Program
        {
            static void Main(string[] args)
            {
                //获取一个target的实例
                IApplyCharge applyAdapter = new ApplyAdapter();
                applyAdapter.ApplyChange();//表面上用的苹果充电方法ApplyChange,本质上还是用的安卓充电方法AndriodChange。
    
                Console.ReadKey();
            }
        }

    运行程序如下:

     2.小结

    上边例子的类图

     

    适配器的使用场景:

      系统想使用一个类,但是这个类的接口不符合系统的要求时使用适配器模式。

    适配器模式的优点:

      1.提高代码复用,复用了Adaptee中的方法

      2.灵活性好,如没有关联的两个类A和类B,类A想借用类B的方法,可以在类A中添加一个类B的实例,然后调用类B实例的方法即可。

    适配器模式的缺点:

      1.过多使用适配器会让会同凌乱,如我们明明调用的是A接口的功能,但是却被适配成了B接口的功能。

  • 相关阅读:
    hdu 4027 Can you answer these queries? 线段树
    ZOJ1610 Count the Colors 线段树
    poj 2528 Mayor's posters 离散化 线段树
    hdu 1599 find the mincost route floyd求最小环
    POJ 2686 Traveling by Stagecoach 状压DP
    POJ 1990 MooFest 树状数组
    POJ 2955 Brackets 区间DP
    lightoj 1422 Halloween Costumes 区间DP
    模板 有源汇上下界最小流 loj117
    模板 有源汇上下界最大流 loj116
  • 原文地址:https://www.cnblogs.com/wyy1234/p/10012506.html
Copyright © 2011-2022 走看看