zoukankan      html  css  js  c++  java
  • 适配器模式

    适配器模式
    Adapter(别名Wrapper)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。
    要点:
    1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
    2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

    实现:

    clip_image002
    适配器模式


    类的适配器模式结构图(继承)

    clip_image004
    适配器模式


     

    对象的适配器模式结构图(组合)

    (对象适配器的代码实现)

    Target:定义Client使用的与特定领域相关的接口

    public interface Target
    {
        void request();
    }

    Adaptee:现在需要适配的已经存在的接口
    public class Adaptee
    {
        public void specificRequest(){}
    }

     

    Adapter:对Adaptee 的接口与Target接口进行适配

    public class Adapter implements Target
    {
        public Adapter(Adaptee adaptee)
        {
            super();
            this.adaptee = adaptee;
        }

        public void request()
        {
            adaptee.specificRequest();
        }

        private Adaptee adaptee;
    }

    适用性:
    1. 系统需要使用现有的类,而此类的接口不符合系统的需要。

    2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

    3. (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

    效果及优缺点:

    对于类适配器:

    1. 用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

    2. 使得Adapter可以override(重定义) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

    对于对象适配器:

    1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。

    2. 使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。
    作者:God bless you
    出处:http://www.cnblogs.com/god_bless_you/
    本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 相关阅读:
    URL模块之parse方法
    结合GET(),POST()实现一个简单、完整的服务器
    Node.js初探之实现能向前台返回东西的简单服务器
    float和position
    回归博客园·共享onload事件
    百度地图api的用法
    美丽数列
    低位值
    删括号
    牛牛找工作
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254968.html
Copyright © 2011-2022 走看看