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中 数据相匹配)来提供这一适配器。

  • 相关阅读:
    Oracle11g口令过期的解决
    小而美的GIF生成神器ScreenToGif
    计算机图形学——区域填充算法(基本光栅图形算法)
    计算机图形学——多边形的扫描转换(基本光栅图形算法)
    计算机图形学——直线扫描转换(基本光栅图形算法)
    计算机图形学——图形和图像
    Java题库——Chapter8 对象和类
    操作系统——死锁的概念以及死锁处理策略
    Java题库——chapter7 多维数组
    Python 词云可视化
  • 原文地址:https://www.cnblogs.com/jqbird/p/2155534.html
Copyright © 2011-2022 走看看