zoukankan      html  css  js  c++  java
  • 设计模式学习笔记适配器模式

    概述:                                                                                                     

    适配器模式(atapter)将一个类的接口转换成用户希望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    应用场合:                                                                                               

    1.你想使用一个已经存在的类,而它的接口不符合你的要求。

    2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

    3.(仅适用于对象adapter),你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口。对象适配器可以适配它的父类接口

    类图:                                                                                                      

    代码结构:                                                                                                  

    1.目标接口

        /// <summary>
    /// 客户期待的目标接口
    /// </summary>
    class Target
    {
    public virtual void Request()
    {
    Console.WriteLine(
    "普通请求");
    }
    }

    2.需要适配的类

        /// <summary>
    /// 需要适配的类
    /// </summary>
    class Adaptee
    {
    public void SpecificRequest()
    {
    Console.WriteLine(
    "特殊请求");
    }
    }

    3.构造适配器

        /// <summary>
    /// 通过在内部包装一个Adapter对象,把源接口转换成目标接口
    /// </summary>
    class Adapter:Target
    {
    /// <summary>
    /// 建立一个私有的Adapter对象
    /// </summary>
    private Adaptee adaptee = new Adaptee();

    public override void Request()
    {
    //这样就可以把表面上调用Request()方法变成实际调用SpecificRequest()
    adaptee.SpecificRequest();
    }
    }

     4.调用示例

            /// <summary>
    /// 测试适配器模式
    /// </summary>
    static void TestAdapter()
    {
    Target target
    = new Adapter();
    target.Request();
    Console.Read();
    }

      

    小结:                                                                                                         

    适配器模式是在重构无门的情况下出此下策,解决实际的问题最重要,.net类库里的DataAdapter对象就是用作DataSet和数据源之间的适配器以便检索和保存数据,DataAdapter通过映射Fill(这更改了DataSet中的数据以便于数据源中的数据相匹配)和Update(这更改了数据源中的数据以便于DataSet中 数据相匹配)来提供这一适配器。

  • 相关阅读:
    Linux新用户创建与删除细节详解
    通过windows远程访问linux桌面的方法(简单)
    物理机网络地址配置原理
    Hive安装中metadata初始化问题
    彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)
    基于react+react-router+redux+socket.io+koa开发一个聊天室
    深入探析koa之异步回调处理篇
    深入探析koa之中间件流程控制篇
    【踩坑记录】一个新手几乎都踩过的坑...
    NodeJS优缺点及适用场景讨论
  • 原文地址:https://www.cnblogs.com/jqbird/p/2155534.html
Copyright © 2011-2022 走看看