首页 > 其他分享 >07_适配器模式

07_适配器模式

时间:2024-03-10 10:23:11浏览次数:25  
标签:bicycle 07 void 模式 public 接口 Bicycle 适配器

适配器模式是一种结构型设计模式,它通过将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类能够协同工作。

适配器模式有三个主要角色:

  1. 目标接口(Target):定义了客户端所期望的接口。

  2. 源接口(Adaptee):需要被适配的类或接口。

  3. 适配器(Adapter):将源接口转换成目标接口,使得客户端可以使用。

适配器模式的工作原理如下:

  1. 客户端通过调用目标接口来请求某个操作。

  2. 适配器接收到该请求后,将请求转发给源接口。

  3. 源接口执行相应的操作,并将结果返回给适配器。

  4. 适配器将结果转换为目标接口所期望的格式,并将结果返回给客户端。

适配器模式的优点包括:

  1. 可以让原本不兼容的类能够协同工作。

  2. 可以重用已有的类,无需修改其代码。

  3. 可以增加新的适配器类,实现不同类型的适配。

适配器模式适用于以下场景:

  1. 当需要使用一个已存在的类,但其接口与所需要的接口不一致时,可以使用适配器模式。

  2. 当希望创建一个可复用的类,该类与一些不兼容的类协同工作时,可以使用适配器模式。

总结而言,适配器模式通过将一个类的接口转换成另一个接口,使得原本不兼容的类能够协同工作。它提供了一种解决接口不兼容问题的灵活、可复用的方式。

 

Adaptee

/// <summary>
    /// 车
    /// </summary>
    public interface IVehicle
    {
        /// <summary>
        /// 跑
        /// </summary>
        void Run();
        /// <summary>
        /// 鸣笛
        /// </summary>
        void Whistle();
    }

 

Target

/// <summary>
    /// 小车
    /// </summary>
    public class Car : IVehicle
    {
        public void Run()
        {
            Console.WriteLine("小车在跑");
        }

        public void Whistle()
        {
            Console.WriteLine("小车在鸣笛");
        }
    }
/// <summary>
    /// 火车
    /// </summary>
    public class Train : IVehicle
    {
        public void Run()
        {
            Console.WriteLine("火车在跑");
        }

        public void Whistle()
        {
            Console.WriteLine("火车在鸣笛");
        }
    }

 

/// <summary>
    /// 自行车
    /// </summary>
    public class Bicycle
    {
        public void Cycling()
        {
            Console.WriteLine("自行车在骑行");
        }

        public void RingBell()
        {
            Console.WriteLine("自行车在按铃");
        }
    }

 

Adapter

调用自行车类里面的方法适配器如下

类适配器:

/// <summary>
    /// 类适配器
    /// </summary>
    public class BicycleInheritAdapter : Bicycle, IVehicle
    {
        public void Run()
        {
            base.Cycling();
        }

        public void Whistle()
        {
            base.RingBell();
        }
    }

 

对象适配器:

/// <summary>
    /// 对象适配器
    /// </summary>
    public class BicycleCombinationAdapter : IVehicle
    {
        private Bicycle _bicycle = null;
        /// <summary>
        /// 属性注入
        /// </summary>
        public Bicycle Bicycle 
        {
            get 
            {
                return _bicycle;
            }
            set
            {
                if(value != null)
                {
                    _bicycle = value;
                }
            }
        }

        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="bicycle"></param>
        public BicycleCombinationAdapter(Bicycle bicycle =null)
        {
            if (bicycle != null)
            {
                _bicycle = bicycle;
            }
        }

        /// <summary>
        /// 方法注入
        /// </summary>
        /// <param name="bicycle"></param>
        public void SetBicycle(Bicycle bicycle)
        {
            if (bicycle != null)
            {
                _bicycle = bicycle;
            }
        }

        public void Run()
        {
            _bicycle?.Cycling();
        }

        public void Whistle()
        {
            _bicycle?.RingBell();
        }
    }

 

调用:

 public class Client
    {
        public void Start()
        {//类适配器
            IVehicle bicycle = new BicycleInheritAdapter();
            bicycle.Run();
            bicycle.Whistle();

            //对象适配器
            IVehicle bike = new BicycleCombinationAdapter(new Bicycle());//构造函数注入
            //((BicycleCombinationAdapter)bike).Bicycle = new Bicycle();//属性注入
            //((BicycleCombinationAdapter)bike).SetBicycle(new Bicycle());//方法注入

            bike.Run();
            bike.Whistle();

        }
    }
static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();
        }

 

标签:bicycle,07,void,模式,public,接口,Bicycle,适配器
From: https://www.cnblogs.com/MingQiu/p/18063788

相关文章

  • 2024.03.07
    今天是周四,寒假没碰乒乓球,上课练习基本功都拉胯了。今日代码时间半小时。Android架构Android操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。 Android程序库这个类别包括了专门为Android开发的基于Java的程序库。这个类别程序库的示例包......
  • STM32的3种启动模式
    STM32的3种启动模式STM32启动模式介绍各种模式介绍boot0=0Flashmemory启动方式启动地址:0x08000000是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。基本上都是采用这种模式。boot0=1;boot1=0System......
  • 07_Linux常用命令第二部分
    Linux常用命令第二部分1.mkdir命令功能:创建一个新的文件夹mkdirtest创建一个名为test的文件夹注意:linux下是区分大小写的同一级目录下不能创建文件夹名字一样的文件使用-p参数可以创建多级目录2.rmdir功能:删除一个非空目录rmdirtest删除test文件夹注意:这个命......
  • P7072 [CSP-J2020] 直播获奖
    原题链接题解太巧妙了!!code#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,w;cin>>n>>w;intscore[605]={0};for(inti=1;i<=n;i++){intx;cin>>x;score[x]++;intsum......
  • Mac上安装主从模式&哨兵模式Redis(5.0.9)
    1、服务节点说明Master节点ip和端口为:127.0.0.1:6380Slave节点ip和端口为:127.0.0.1:6381;127.0.0.1:6382哨兵节点说明:127.0.0.1:26380;127.0.0.1:26381;127.0.0.1:26382Redis哨兵集群拓扑图.png2、配置主从模式2.1、redis修改配置2.1.1、Master的redis.conf设置哪些IP......
  • 神州笔记本 win11 节能模式 供电不足 自动关机
    刚刚买了一个神州笔记本没几天,用着用着就出现问题了。本人使用电脑有个极为不好的习惯,那就是会一次性打开特别多的应用,然后不关,一直留着,这个习惯虽然不好但也是一直没有啥问题的,不过最近换了个新的笔记本就出现了问题。神州笔记本开启省电模式:之所以开这个模式其实并不是为......
  • 06_原型模式
    原型模式是一种创建型设计模式,它通过克隆现有对象来创建新对象,而不是通过实例化类来创建。原型模式允许我们创建具有相同属性和方法的对象集合,从而减少了对象的创建成本。在原型模式中,我们首先创建一个原始对象,然后通过克隆该对象来创建新的对象。这样,我们可以在不重新实例化类的......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点
    24.两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/description/publicListNodeswapPairs(ListNodehead){if(head==null||head.next==null)returnhead;ListNoderes=head.next;ListNodepre=newListNod......
  • 05_建造者模式
    建造者模式是一种创建型设计模式,旨在让你能够创建复杂对象,而无需直接在应用程序中指定其具体类型。通过建造者模式,你可以将对象的构建过程和表示分离,从而使相同的构建过程可以创建不同表示形式的对象。这种模式通常包括以下几个关键组件:产品(Product):最终要创建的复杂对象。抽......
  • Go语言实现设计模式之命令模式
    摘要:命令模式是一种常用的设计模式,它将请求封装成对象,从而使请求的发送者和接收者解耦。本文将详细介绍命令模式的概念和原理,并使用Go语言实现一个示例,以帮助读者更好地理解该设计模式的应用。引言:在软件开发中,命令模式是一种常见的设计模式,它可以帮助我们将请求的发送者和接收......