`
lastsoul
  • 浏览: 33439 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

适配器模式

 
阅读更多
1. 概述

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

2. 解决的问题

  即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

3. 模式中的角色

  3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  3.2 需要适配的类(Adaptee):需要适配的类或适配者类。

  3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。  

4. 模式解读

  注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。
具体的实现代码如下:
类适配器

package com.visionsky.DesignPattern;

interface Target {

    void Request();

}

class Adaptee {

    void SpecificRequst() {

        System.out.println("Adaptee's SpecificRequst");

    }

}

class Adapter extends Adaptee implements Target 

{

    @Override

    public void Request() {

         System.out.println("Adapter's Request");

          super.SpecificRequst();

    }

}

public class AdapterDemo {

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Target t=new Adapter();

        t.Request();

    }

}

对象适配器

package com.visionsky.DesignPattern;

interface Target {

    void Request();

}

class Adaptee {

    void SpecificRequst() {

        System.out.println("Adaptee's SpecificRequst");

    }

}

class Adapter  implements Target 

{

    private Adaptee adaptee;

    public Adapter()

    {

        this.adaptee=new Adaptee();

    }

      @Override

    public void Request() {

         System.out.println("Adapter's Request");

         adaptee.SpecificRequst();

    }

}

public class AdapterDemo {

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Target t=new Adapter();

        t.Request();

    }

}
现在来对2种适配模式做个分析:

1.类的适配模式用于单一源的适配,由于它的源的单一话,代码实现不用写选择逻辑,很清晰;而对象的适配模式则可用于多源的适配,弥补了类适配模式的不足,使得原本用类适配模式需要写很多适配器的情况不复存在,弱点是,由于源的数目可以较多,所以具体的实现条件选择分支比较多,不太清晰。

2.适配器模式主要用于几种情况:(1)系统需要使用现有的类,但现有的类不完全符合需要。(2)讲彼此没有太大关联的类引进来一起完成某项工作(指对象适配)。



最后,再来顺带谈谈默认适配器模式:这种模式的核心归结如下:当你想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,就用默认的适配器模式,他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。
七.适配器模式与装饰者模式

     它们都可以用来包装对象,本质区别在于
1.适配器模式:将一个接口转换成另外一个接口。
2.装饰者模式:不改变接口,只加入职责。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics