设计模式—适配器模式

杀马特。学长 韩版系。学妹 提交于 2020-02-21 14:18:40

参考:https://www.cnblogs.com/PatrickLiu/p/7660554.html

1.什么是适配器

2适配器有什么优势

3适配器怎么用

定义:【结构型】设计模式有如下几种:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。【创建型】的设计模式解决的是对象创建的问题,那【结构型】设计模式解决的是类和对象的组合关系的问题。今天我们就开始讲【结构型】设计模式里面的第一个设计模式,中文名称:适配器模式,英文名称:Adapter Pattern。(举个例子:说起这个模式其实很简单,在现实生活中也有很多实例,比如:我们手机的充电器,充电器的接头,有的是把两相电转换为三相电的,当然也有把三相电转换成两相电的。我们经常使用笔记本电脑,笔记本电脑的工作电压和我们家里照明电压是不一致的,当然也就需要充电器把照明电压转换成笔记本的工作电压,只有这样笔记本电脑才可以正常工作。太多了,就不一一列举了。我们只要记住一点,适配就是转换,把不能在一起工作的两样东西通过转换,让他们可以在一起工作。)

模式的组成

      可以看出,在适配器模式的结构图有以下角色:

      (1)、目标角色(Target):定义Client使用的与特定领域相关的接口。
   
      (2)、客户角色(Client):与符合Target接口的对象协同。
 
      (3)、被适配角色(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要适配。
 
      (4)、适配器角色(Adapte) :适配器模式的核心。它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配.

意图

    将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。    

using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading;

namespace AdapterModel
{
    //适配器模式有类适配器和对象适配器
    //适用于
    class Program
    {

        public  interface ITwoHole
        {
            void  Request();
        }

        public class TwoHole : ITwoHole
        {
            public void Request()
            {
                Console.WriteLine("这是两孔插座");
            }
        }

        public class ThreeHole
        {
            public void ThreeRequest()
            {
                Console.WriteLine("这是三孔插座");
            }
        }
        /// <summary>
        /// 类适配器
        /// </summary>
        public class AdapterClass: ThreeHole, ITwoHole
        {
            public  void Request()
            {
                base.ThreeRequest();
            }
        }
        /// <summary>
        /// 对象适配器
        /// </summary>
        public class AdapterObject: ITwoHole
        {
            private static ThreeHole ThreeHole=new ThreeHole();
            public void Request()
            {
                ThreeHole.ThreeRequest();
            }
        }


        static void Main(string[] args)
        {
            //类适配器  高耦合 该类所有东西都继承下来 可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”
            ITwoHole twoHole = new AdapterClass();
            twoHole.Request();

            //对象适配器 可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”(这点是两种实现方式都具有的)
            ITwoHole twoHole1 = new AdapterObject();
            twoHole1.Request();
           
        }
    }
}

适配器模式哪里用:集成的时候用,开始的时候不需要去考虑。还有

   1.在.NET中复用COM对象:

    COM对象不符合.NET对象的接口,使用tlbimp.exe来创建一个Runtime Callable Wrapper(RCW)以使其符合.NET对象的接口,COM Interop就好像是COM和.NET之间的一座桥梁。

  2..NET数据访问类(Adapter变体):

   各种数据库并没有提供DataSet接口,使用DbDataAdapter可以将任何个数据库访问/存取适配到一个DataSet对象上,DbDataAdapter在数据库和DataSet之间做了很好的适配。当然还有SqlDataAdapter类型了,针对微软SqlServer类型的数据库在和DataSet之间进行适配。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!