首页 > 代码库 > 设计模式——适配器模式

设计模式——适配器模式


  1. 适配器模式是将一个类的接口转换成客户端希望的另外一个接口。
    Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

  2. 适配器模式中的角色:1)目标接口:客户端所期待的的接口,目标可以是具体的或抽象的类,也可以是接口;2)需要适配的类,需要适配的类或者适配者类;3)适配器:通过包装一个需要适配的对象把原接口转换成目标接口。

  3. 分类:1)类适配器模式,通过多继承对一个接口与另一个接口进行匹配;2)对象适配器模式。

  4. 优点:

    1)  通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做可以更简单、更直接、更紧凑。

    2)  复用了现存的类,解决了现存类和复用环境要求不一致的问题

    3)  将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。

    4)  一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

5.缺点:

    1)  对于对象适配器来说,更换适配器的实现过程比较复杂。

6.适用场景

    1)  系统需要使用现有的类,而这些类的接口不符合系统的接口

    2)  想要建立一个可以重用的类,用于一些彼此之间没有太大关系的一些类,包括一些可能在将来引进的类一起工作。

    3)  两个类所做的事情相同或类似,但是具有不同的接口

    4)  旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

    5)  使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

7.对象适配器结构图:

                            wKioL1SGRlGQ3HxmAADanzjBHsI934.jpg

8.实例代码

///<summary>

    /// 定义客户端期待的接口

    /// </summary>

    public class Target

    {

        /// <summary>

        /// 使用virtual修饰以便子类可以重写

        /// </summary>

        public virtual void Request()

        {

            Console.WriteLine("This is acommon request");

        }

    }

 

    /// <summary>

    /// 定义需要适配的类

    /// </summary>

    public class Adaptee

    {

        public void SpecificRequest()

        {

            Console.WriteLine("This is aspecial request.");

        }

    }

 

    /// <summary>

    /// 定义适配器

    /// </summary>

    public class Adapter:Target

    {

        // 建立一个私有的Adeptee对象

        private Adaptee adaptee = newAdaptee();

 

        /// <summary>

        /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()

        /// </summary>

        public override void Request()

        {

            adaptee.SpecificRequest();

        }

}

 

客户端调用:

classProgram

    {

        static void Main(string[] args)

        {

           // 对客户端来说,调用的就是TargetRequest()

            Target target = new Adapter();

            target.Request();

 

            Console.Read();

        }

    }

 

9.参考文献:

http://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html


本文出自 “虎哥的博客” 博客,请务必保留此出处http://7613577.blog.51cto.com/7603577/1587728

设计模式——适配器模式