• 适配器模式


    引言

    在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。那么如果将“将现存的对象”在新的环境中进行调用呢?解决这个问题的办法就是我们本文要介绍的适配器模式。

    定义

    把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作

    适配器的实现例子

    在这里以生活中的一个例子来进行演示适配器模式的实现,具体场景是: 在生活中,我们买的电器插头是2个孔的,但是我们买的插座只有三个孔的,此时我们就希望电器的插头可以转换为三个孔的就好,这样我们就可以直接把它插在插座上,此时三个孔插头就是客户端期待的另一种接口,自然两个孔的插头就是现有的接口,适配器模式就是用来完成这种转换的

    实例

      class Program
        {
            static void Main(string[] args)
            {
                //客户端通过适配器使用两个孔的插头
                ThreeHole threehole = new PowerAdapter();
                threehole.Request();
                Console.ReadLine();
            }
        }
    
        /// <summary>
        /// 三个孔的插头,也就是适配器中的角色
        /// </summary>
        public class ThreeHole
        {
            // 客户端需要的方法
            public virtual void Request()
            {
            }
        }
    
        /// <summary>
        /// 两个孔的插头
        /// </summary>
        public class TwoHole
        {
            public void SpecificRequest()
            {
                Console.WriteLine("我是两个孔的插头");
            }
        }
    
        /// <summary>
        /// 适配器类
        /// </summary>
        public class PowerAdapter : ThreeHole
        {
            // 引用两个孔插头的实例,从而将客户端与TwoHole联系起来
            public TwoHole twoholeAdaptee = new TwoHole();
    
            /// <summary>
            /// 实现三个孔插头接口方法
            /// </summary>
            public override void Request()
            {
                twoholeAdaptee.SpecificRequest();
            }
        }

    优点

    可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”

    可以重新定义Adaptee(被适配的类)的部分行为,因为在类适配器模式中,Adapter是Adaptee的子类

    仅仅引入一个对象,并不需要额外的字段来引用实例(这个即是优点也是缺点)。

    缺点

    采用了 “多继承”的实现方式,带来了不良的高耦合。

    感觉这个模式的灵活性不太好,稍微变化的需要,那么改许多的代码

  • 相关阅读:
    FFmpeg 协议初步学习
    HTML DOM(一):认识DOM
    ant 安装
    ubunut 查看port被哪个程序占用
    cacti气象图调整(批量位置调整、更改生成图大小等)
    内网port映射具体解释(花生壳)
    HDU 2647 Reward(图论-拓扑排序)
    白话经典算法系列之七 堆与堆排序
    Codeforces Round #191 (Div. 2)---A. Flipping Game
    Serverlet具体解释
  • 原文地址:https://www.cnblogs.com/liu23/p/9142815.html
Copyright © 2020-2023  润新知