我是靠谱客的博主 积极大地,最近开发中收集的这篇文章主要介绍结构性模式 - 适配器模式Adapter,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学习而来,代码是自己敲的。也有些自己的理解在里边,有问题希望大家指出。

 

模式的定义与特点

        适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。  

1.适配器模式的优点

  • 客户端通过适配器可以透明地调用目标接口。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  • 在很多业务场景中符合开闭原则。

2.适配器模式的缺点

  • 适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。
  • 增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

模式的结构与实现

对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。现在来介绍它们的基本结构。  

1. 模式的结构

适配器模式(Adapter)包含以下主要角色。

  1. 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  2. 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
  3. 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

类适配器模式的结构图如图 1 所示。类适配器有很多的局限性,所以一般不推荐使用。

图1

 

 对象适配器模式的结构图如图 2 所示。对象适配器,满足里氏替换原则推荐使用

图2
using DesignPattern.AdapterPattern;
using System;

namespace DesignPattern
{
    internal class Program
    {
        static void Main(string[] args)
        {
            AdapterHelper();
        }

        #region Pattern - Adapter
        static void AdapterHelper()
        {
            #region 类适配器, 会发现和网线没有任何关系。用的计较少
            Reticle reticle1 = new Reticle();

            Computer computer1 = new Computer();
            Adapter1 adapter1 = new Adapter1();
            computer1.Net(adapter1);
            #endregion

            #region 对象适配器, 比较常用
            Computer computer2 = new Computer();
            Reticle reticle2 = new Reticle();
            Adapter2 adapter2 = new Adapter2(reticle2);     //适配器链接网线
            computer2.Net(adapter2);    //电脑通过适配器使用网线上网
            #endregion

            Console.ReadLine();
        }
        #endregion
    }
}

//======================================================================================

using System;

namespace DesignPattern.AdapterPattern
{
    /// <summary>
    /// 用USB上网接口
    /// </summary>
    public interface INetToUsb
    {
        void HandleRequest();
    }

    //类适配器
    public class Adapter1 : Reticle, INetToUsb
    {
        public void HandleRequest()
        {
            base.Request();
            Console.WriteLine("已经可以上网了1111111");
        }
    }

    //对象适配器
    public class Adapter2 : INetToUsb
    {
        private Reticle reticle;
        public Adapter2(Reticle reticle)
        {
            this.reticle = reticle;
        }
        public void HandleRequest()
        {
            reticle.Request();
            Console.WriteLine("已经可以上网了2222222");
        }
    }

    /// <summary>
    /// 电脑
    /// </summary>
    public class Computer
    {
        /// <summary>
        /// 上网
        /// </summary>
        /// <param name="adapter">USB适配器</param>
        public void Net(INetToUsb adapter)
        {
            adapter.HandleRequest();
        }
    }

    /// <summary>
    /// 网线
    /// </summary>
    public class Reticle
    {
        public void Request()
        {
            Console.WriteLine("用网线上网");
        }
    }
}
运行内容


希望大家:点赞,留言,关注咯~    
????????????????

唠家常

小黑的今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加小黑的QQ:841298494,大家一起进步。

  • 客官,看完get之后记得点赞哟!
  • 小伙伴你还想要别的知识?好的呀,分享给你们????

今日推荐

  • 小黑的杂货铺,想要什么都有,客官不进来喝杯茶么?
  • 小黑总结的GoF23 种设计模式的分类和功能

最后

以上就是积极大地为你收集整理的结构性模式 - 适配器模式Adapter的全部内容,希望文章能够帮你解决结构性模式 - 适配器模式Adapter所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部