Java设计模式(7)——结构型模式之适配器模式(Adapter)

一、概述

  概念

  

  其实,举个生活中的例子的话,适配器模式可以类比转接头,比如typeC和USB的转接头,把原本只能接typeC的接口,拓展为可以接普通USB;这里的转接头一方面需要查在typeC上,一方面需要作为USB插口。

  如果要举个Java中的例子的话,不妨看看JDBC的章节介绍!下图为JDBC简略UML图(中间的xxx JDBC就是我们适配JDBC与各大数据库厂商的适配器了!)

  

 

  简略图

  

   类的适配器模式

  

   

   对象的适配器模式(注意看类的关系,上面是继承,下面是委派)

  

  

 二、实践

  上面提到的转接头的例子,我们参考http://www.cnblogs.com/V1haoge/p/6479118.html

  当然,此例和上述转接头的例子本质是一样的(只是根据功能把接口分开的写法),上例中实际调用的都是已有的接口,通过适配的形式来调用,我们实际使用时应当灵活运用!

  类的适配,我们分别写出简略图中的角色即可

  目标角色

/**
 * 目标接口
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public interface Target {
    /**
     * 目标操作1
     */
    void operation1();
    /**
     * 目标操作2
     */
    void operation2();
}

  源角色

/**
 * 源角色
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public class Adaptee {
    public void operation1(){
        System.out.println("adaptee#opetion1()");
    }
}

  适配器

/**
 * 适配器角色
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public class Adapter extends Adaptee implements Target{
    @Override
    public void operation2() {
        System.out.println("adapter#operation2()");
    }
}

  客户端使用

public class Client {
    public static void main(String[] args) {
        Target t = new Adapter();
        t.operation2();
    }
}

  对象的适配器我们看核心的适配器角色

  适配器

/**
 * 适配器角色
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public class Adapter implements Target{
    private Adaptee adaptee;
    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }
    @Override
    public void operation1() {
        adaptee.operation1();
    }

    @Override
    public void operation2() {
        System.out.println("adapter#operation2()");
    }
}

 三、改进与思考

  缺省的适配器模式

  在JAVA中要实现一个接口,就要实现所有的抽象方法。但是有时候只想实现一部分方法,就可以使用一个抽象类来实现这个接口,然后提供“空实现”,这样我们只要继承这个类,重写需要的方法即可!

  实际案例

  

    

 

posted @ 2017-10-28 17:42  ---江北  阅读(246)  评论(0编辑  收藏  举报
TOP