• C# 设计模式巩固笔记


    前言

    多读书、多学习

    介绍-适配器模式

    定义:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    实现

    这里有大家生活中常见的例子,作为一名程序员。看到适配器我首先想到的就是我们常用的笔记本的电源适配器。大家都知道笔记本是无法直接接入220V的电压的,一般笔记本支持的就是16 - 22V的电压,这个就是电源适配器的输出的电压。

    下面就通过适配器模式来实现这个过程。

    1.定义一个220V电压的接口,由我们的插座来实现:

      /// <summary>
        /// 220V电源插口
        /// </summary>
        public interface ISoketPowerWith200V
        {
            /// <summary>
            /// 输出电压
            /// </summary>
            /// <returns></returns>
            int OutPutVoltage();
        }
        /// <summary>
        /// 电源
        /// </summary>
        public class Socket : ISoketPowerWith200V
        {
            /// <summary>
            /// 输出电压
            /// </summary>
            /// <returns></returns>
            public int OutPutVoltage()
            {
                return 220;
            }
        }

    2.需要一个输出电压的接口:

        /// <summary>
        /// 20V电压插口
        /// </summary>
        public interface ISoketPowerWith20V
        {
            /// <summary>
            /// 输出电压
            /// </summary>
            /// <returns></returns>
            int OutPutVoltage();
        }

    3.看下笔记本类,笔记本提供了20V电压的插口:

       /// <summary>
        /// 笔记本电脑
        /// </summary>
        public class LapTop
        {
            /// <summary>
            /// 构造函数
            /// </summary>
            public LapTop()
            {
    
            }
            /// <summary>
            /// 接入电源适配器
            /// </summary>
            /// <param name="powerAdapter">电源适配器</param>
            public void SetPowerAdapter(ISoketPowerWith20V powerAdapter)
            {
                PowerAdapter = powerAdapter;
                Request20V();
            }
            /// <summary>
            /// 电源适配器 - 输出电压 20V
            /// </summary>
            public ISoketPowerWith20V PowerAdapter { get; set; }
            /// <summary>
            /// 需要20V电压
            /// </summary>
            public void Request20V()
            {
                int voltage = PowerAdapter.OutPutVoltage();
                Console.WriteLine("开始检测输入电压是否正确...");
                if (voltage == 20)
                    Console.WriteLine("输入电压正确!");
                else
                    Console.WriteLine("输入电压错误!");
            }
        }

     4.这个20V的电源如何实现呢,下面就是我们的适配器出场了:

        /// <summary>
        /// 电源适配器类
        /// </summary>
        public class PowerAdapter : ISoketPowerWith20V
        {
            /// <summary>
            /// 220V插座
            /// </summary>
            ISoketPowerWith200V _socket;
            public PowerAdapter()
            {
            }
            /// <summary>
            /// 接入电源
            /// </summary>
            /// <param name="socket">插座</param>
            public void SetSocket(ISoketPowerWith200V socket)
            {
                this._socket = socket;
            }
            /// <summary>
            /// 输入电压
            /// </summary>
            /// <returns></returns>
            public int OutPutVoltage()
            {
                int voltage = _socket.OutPutVoltage();
                return Switch(voltage);
            }
            /// <summary>
            /// 转换电压
            /// </summary>
            /// <param name="voltage">输入电压</param>
            /// <returns>输出电压</returns>
            private int Switch(int voltage)
            {
                Console.WriteLine("接入{0}V电压,开始转换...",voltage);
                Console.WriteLine("转换电压完成!");
                return 20;
            }
        }

     电源适配器接入220V电压,然后通过转换输出20V的电压。

    5.最后看调用:

      class Program
        {
            static void Main(string[] args)
            {
    
                //1.拿出笔记本
                LapTop lapTop = new LapTop();
                //2.拿出适配器
                PowerAdapter adapter = new PowerAdapter();
                //3.找到一个插头
                Socket socket = new Socket();
                //4.适配器接入电源
                adapter.SetSocket(socket);
                //5.接入适配器
                lapTop.SetPowerAdapter(adapter);
    
                Console.Read();
            }
        }

     结果:

    欢迎批评指正,转载请注明出处 http://www.cnblogs.com/xinwang/p/6425189.html

  • 相关阅读:
    剑指offer-矩形覆盖
    剑指offer-变态跳台阶
    剑指offer-跳台阶
    剑指offer-斐波那契数列
    剑指offer-旋转数组的最小数字
    剑指offer-用俩个栈实现队列
    剑指offer-重建二叉树
    剑指offer-从尾到头打印链表
    http头
    mysql-8.0解压缩版安装配置完整过程
  • 原文地址:https://www.cnblogs.com/xinwang/p/6425189.html
Copyright © 2020-2023  润新知