zoukankan      html  css  js  c++  java
  • 设计模式——Adapter模式

    4        Adapter模式

    4.1      概述

    Adapter模式又叫适配器模式,顾名思义,这个模式就是把一个不能用的东西“适配”成可以用的东西。

    4.2      设计

    那么是如何“适配”的呢?比如,东西A想使用东西B,但是A没有能力(没法)使用B,怎么办?A就让东西C帮忙,A通过C就可以用B了。C如何帮忙呢?C一边可以通过一个“手柄”让A握住,A一用力,C就在另一边握住B的“手柄”,使用B。这样A就可以间接的使用到B了。说的这么多,搞的糊里糊涂的,其实AB就好像是两节水管,C就好像是连接水管的接头。

    4.3      实现

    UML图:

    示例代码为:

      1using System;
      2
      3namespace Example
      4{
      5    /// <summary>
      6    /// 示例
      7    /// </summary>

      8    class Example
      9    {
     10        /// <summary>
     11        /// 应用程序的主入口点。
     12        /// </summary>

     13        [STAThread]
     14        static void Main(string[] args)
     15        {
     16            Hosepipe pipe = new BigHosepipe() ;
     17            pipe.Influx() ;
     18            pipe.Effuse() ;
     19        }

     20        /// <summary>
     21        /// 水
     22        /// </summary>

     23        public class Water
     24        {
     25            public Water() {}
     26        }

     27        /// <summary>
     28        /// 大水管
     29        /// </summary>
     30        /// <remarks>
     31        /// 程序员A编写
     32        /// 测试员C测试
     33        /// </remarks>

     34        public class BigPipe
     35        {
     36            public Water In() 
     37            {
     38                Console.WriteLine( "流入水" ) ;
     39                return new Water() ;
     40            }
     
     41            public void Out() 
     42            {
     43                Console.WriteLine( "水流出" ) ;
     44            }

     45        }

     46        /// <summary>
     47        /// 水管接口
     48        /// </summary>

     49        interface Hosepipe
     50        {
     51            /// <summary>
     52            /// 进水
     53            /// </summary>
     54            /// <returns></returns>

     55            Water Influx() ;
     56            /// <summary>
     57            /// 出水
     58            /// </summary>

     59            void Effuse() ;
     60        }

     61        /// <summary>
     62        /// 小水管
     63        /// </summary>

     64        public class SmallHosepipe : Hosepipe
     65        {
     66            #region Hosepipe 成员
     67
     68            public Water Influx()
     69            {
     70                // TODO:  添加 SmallHosepipe.Influx 实现
     71                return null;
     72            }

     73
     74            public void Effuse()
     75            {
     76                // TODO:  添加 SmallHosepipe.Effuse 实现
     77            }

     78
     79            #endregion

     80        }

     81        /// <summary>
     82        /// 中水管
     83        /// </summary>

     84        public class MiddleHosepipe : Hosepipe
     85        {
     86            #region Hosepipe 成员
     87
     88            public Water Influx()
     89            {
     90                // TODO:  添加 MiddleHosepipe.Influx 实现
     91                return null;
     92            }

     93
     94            public void Effuse()
     95            {
     96                // TODO:  添加 MiddleHosepipe.Effuse 实现
     97            }

     98
     99            #endregion

    100        }

    101        /// <summary>
    102        /// 大水管
    103        /// </summary>
    104        /// <remarks>
    105        /// 当准备写大水管的进出水方法时,发现程序A已经写过同样功能的代码
    106        /// 但是A命名时并没有征求你的意见以及你也没有要求
    107        /// 所以只要采用Adapter模式,使用A已编好的功能
    108        /// </remarks>

    109        public class BigHosepipe : Hosepipe
    110        {
    111            private BigPipe bigPipe = new BigPipe() ;
    112            #region Hosepipe 成员
    113            public Water Influx()
    114            {
    115                return bigPipe.In() ;
    116            }

    117            public void Effuse()
    118            {
    119                bigPipe.Out() ;
    120            }

    121            #endregion

    122        }

    123    }

    124}

    125
  • 相关阅读:
    Fedora kde桌面安装拼音输入法
    人大金仓数据库添加外键,删除外键
    东方通 TongWeb 远程调试相关脚本
    IDEA快捷键提示插件
    使用 url.openConnection、IOUtils.write 从网站下载文件与本地文件对比
    CAS服务端返回用户ID等扩展信息
    libvirt 启用TCP远程连接,windows平台java调用示例
    virsh创建虚拟机
    etcd_dbsize 只能使用2G限制修改
    通过备份 Etcd 来完美恢复 Kubernetes 中的误删数据
  • 原文地址:https://www.cnblogs.com/fengchao/p/203536.html
Copyright © 2011-2022 走看看