您的位置:首页 > 编程语言 > Java开发

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

2017-10-28 17:42 821 查看

一、概述

  概念

  


  其实,举个生活中的例子的话,适配器模式可以类比转接头,比如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中要实现一个接口,就要实现所有的抽象方法。但是有时候只想实现一部分方法,就可以使用一个抽象类来实现这个接口,然后提供“空实现”,这样我们只要继承这个类,重写需要的方法即可!

  实际案例

  


    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: