设计模式学习笔记-适配器模式(对象适配器)

一、概述

      将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;

二、模式中的角色

      Target:定义客户端使用的与特定领域相关的接口;

      Clinet:与符合Target接口的对象协同;

      Adpatee:定义一个已经存在的接口,这个接口需要适配;

      Adpater:对Adpatee的接口与Target接口进行匹配;

三、UML类图

 

四、代码实现

    /// <summary>
    /// 客户端期待的类
    /// </summary>
    public class Target
    {
        /// <summary>
        /// 使用virtual修饰以便子类可以重写
        /// </summary>
        public virtual void Request()
        {
            Console.WriteLine("这是Target中的Request的方法!");
        }
    }


    /// <summary>
    /// 定义需要适配的类
    /// </summary>
    public class Adaptee
    {
        public void SpecificRequest()
        {
            Console.WriteLine("这是Adaptee中的SpecificRequest方法!");
        }
    }

    /// <summary>
    /// 定义适配器类
    /// </summary>
    public class Adapter : Target
    {
        Adaptee adaptee = new Adaptee();

        /// <summary>
        /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()
        /// </summary>
        public override void Request()
        {
            adaptee.SpecificRequest();
        }
    }

        /// <summary>
        /// 客服端代码
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            #region  对象适配器

            Target target = new Adapter();
            target.Request();

            #endregion
         }

得到的结果:

五、应用场景

     5.1 你想使用一个已经存在的类,而它的接口不符合你的需求;

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

     5.3 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口;

六、应用举例

     ADO.NET中的DataAdapter

 

参考书籍《设计模式-可复用面向对象软件的基础》

posted @ 2017-05-17 23:43 Rich.W 阅读(...) 评论(...) 编辑 收藏