服务器之家

服务器之家 > 正文

java设计模式之适配器模式(Adapter)

时间:2020-07-21 11:44     来源/作者:yuminfeng728

概述

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

两种实现方式

1.类的适配器模式
2.对象的适配器模式:

类的适配器模式的UML图,如下:

java设计模式之适配器模式(Adapter)

类的适配器模式把适配的类的API转换成为目标类的API。

上图设计的角色有:

目标角色(Target):这就是所期待得到的接口。
源角色(Adapee):现在需要适配的接口。
适配器角色(Adapter):是本模式的核心,适配器把源接口转换成目标接口。

代码示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
interface Target{
  void method1();
  void method2(); //期待得到该方法
}
//源类中不具备method2中的方法。
class Adaptee{
  public void method1(){
    System.out.println("method1");
  }
}
 
class Adapter extends Adaptee implements Target{
 
  @Override
  public void method2() {
    System.out.println("this is target method");
  }
 
}
 
public class MainTest {
 
  public static void main(String arg[]) {
    Target target = new Adapter();
    target.method2();
  }
}

对象的适配器模式的UMl图,如下:

java设计模式之适配器模式(Adapter)

核心思路与类的适配器模式相同,只是将Adapter类修改,不继承Adaptee类,而是持有Adaptee类的引用。代码如下:

java" id="highlighter_787876">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
interface Target{
  void method1();
  void method2();
}
 
class Adaptee{
  public void method1(){
    System.out.println("method1");
  }
}
 
class Adapter implements Target{
 
  private Adaptee adaptee;
 
  public Adapter(Adaptee adaptee){
    this.adaptee = adaptee;
  }
 
  @Override
  public void method2() {
    System.out.println("this is target method");
  }
 
  @Override
  public void method1() {
    // TODO Auto-generated method stub
    adaptee.method1();
  }
 
}
 
public class MainTest {
 
  public static void main(String arg[]) {
    Target target = new Adapter(new Adaptee());
    target.method2();
  }
}

适配器模式的优缺点:
更好的复用性,更好的扩展性。系统需要使用现有的类,而此类的接口不符合系统的需要,那么通过适配器模式就可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
缺点:过多的使用适配器,会让系统非常凌乱,不易整体把握。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
返回顶部