适配器模式(Adapter Pattern) 是作为两个不兼容的接口之间的桥梁。

例子:读卡器是作为内存卡和笔记本之间的是适配器,内存卡插入读卡器,读卡器再插入笔记本电脑。

参考资料: 、

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

何时使用:1.要使用已有的一个类的方法,但是不符合我们的使用规范,且我们不知道其源码,无法copy。2。建立一个重复使用的类,用于联系一些彼此之间没有太大联系的类。3.通过接口的转换,将一个类插入到另一个类中。

如何实现:继承或者依赖。适配器继承或者依赖已有的代码,实现目标类的接口。

注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

适配器有两种模式:这两种的差别在于一个是继承源角色类,一个是获取源角色类的对象。

类适配器模式:(继承源角色)

对象适配器模式:(获取源角色对象)

差别:1.类适配器的话,因为是继承了源角色类的关系,所以不能去处理源角色类的子类。而对象适配器则没有关系,一个适配器可以将其源类和其子类都适配到目标接口。

2.类适配器可以重新定义源角色类的方法,通过重写方法即可。而对象适配器的话只能通过适配器子类的方法来达到重写源角色类的方法 。

代码实现:类适配器模式

1 /**

2 * 目标角色

3 */

4 public interface Target {

5 //已有的方法

6 void sampleOp1();

7 //没有但是想要实现的方法

8 void sampleOp2();

9 }

1 /**

2 * 源角色

3 */

4 public class Adaptee {

5

6 public void sampleOp1(){

7 System.out.println("sampleOp1...");

8 }

9 }

1 /**

2 * 适配器角色

3 */

4 public class Adapter extends Adaptee implements Target {

5

6 @Override

7 public void sampleOp2() {

8 System.out.println("sampleOp2....");

9 }

10 }

//测试

@Test

public void test()throws Exception{

Target target = new Adapter();

target.sampleOp1();

target.sampleOp2();

}

/*

*输出

*sampleOp1...

*sampleOp2....

*/

代码实现:对象适配器模式

1 /**

2 * 目标角色

3 */

4 public interface Target {

5 //已有的方法

6 void sampleOp1();

7 //没有但是想要实现的方法

8 void sampleOp2();

9 }

10

11

12 /**

13 * 源角色

14 */

15 public class Adaptee {

16 public void sampleOp1(){

17 System.out.println("sampleOp1...");

18 }

19 }

20

21

22 /**

23 * 适配器角色

24 */

25 public class Adapter implements Target{

26 private Adaptee adaptee;

27

28 public Adapter(Adaptee adaptee) {

29 this.adaptee = adaptee;

30 }

31

32 @Override

33 public void sampleOp1() {

34 this.adaptee.sampleOp1();

35 }

36

37 @Override

38 public void sampleOp2() {

39 System.out.println("sampleOp2....");

40 }

41 }

//测试

@RunWith(SpringRunner.class)

@SpringBootTest

public class AdapterTest {

@Test

public void test()throws Exception{

Target adapter = new Adapter(new Adaptee());

adapter.sampleOp1();

adapter.sampleOp2();

}

}

/*

*sampleOp1...

*sampleOp2....

*/

除此之外,适配器模式还有一种应用。缺省模式

应用场景:我们要实现一个接口,但是在该接口的大量方法内部,我们只想要其中的少数一两个。

在接口的实现中,必须要将其所有的方法进行重写。所以会在代码内有大量的空缺省的方法,造成类的臃肿。

适配器的缺省模式:一个抽象的适配器角色实现该接口。

目标角色继承该抽象类。只需要实现自己想要的方法即可。

代码实现:

1 /**

2 * 一个和尚应该要做的事情

3 */

4 public interface Bonze {

5 void chiZhai();

6 void nianFo();

7 void daZuo();

8 void saoDi();

9 void xiWu();

10 void zhuangZhong();

11 String getName();

12 }

13

14

15

16 /**

17 * 适配器

18 */

19 public abstract class TianStar implements Bonze {

20 @Override

21 public void chiZhai() {

22

23 }

24

25 @Override

26 public void nianFo() {

27

28 }

29

30 @Override

31 public void daZuo() {

32

33 }

34

35 @Override

36 public void saoDi() {

37

38 }

39

40 @Override

41 public void xiWu() {

42

43 }

44

45 @Override

46 public void zhuangZhong() {

47

48 }

49

50 @Override

51 public String getName() {

52 return null;

53 }

54 }

55

56

57

58 /**

59 * 目标角色

60 */

61 public class LuZhiShen extends TianStar {

62 @Override

63 public void xiWu() {

64 System.out.println("" +

65 " 拳打镇关西;\n" +

66 " 大闹五台山;\n" +

67 " 大闹桃花村;\n" +

68 " 火烧瓦官寺;\n" +

69 " 倒拔垂杨柳;");

70 }

71

72 @Override

73 public String getName() {

74 return "鲁智深在此";

75 }

76 }

77

78

79 @RunWith(SpringRunner.class)

80 @SpringBootTest

81 public class LuZhiShenTest {

82

83 @Test

84 public void test()throws Exception{

85 Bonze bonze = new LuZhiShen();

86 bonze.xiWu();

87 System.out.println(bonze.getName());

88 }

89 }

90

91 /*

92 * 拳打镇关西;

93 * 大闹五台山;

94 * 大闹桃花村;

95 * 火烧瓦官寺;

96 * 倒拔垂杨柳;

97 *鲁智深在此

98 */

希望与广大网友互动??

点此进行留言吧!

adapter pattern java_适配器模式(Adapter Pattern)相关推荐

  1. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...

  2. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  3. 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库 ...

  4. 设计模式之适配器模式(Adapter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  5. c++适配器模式adapter

    适配器模式adapter 概念 角色和职责 案例 概念 Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式. 角色和职责 适用于: 是将一个 ...

  6. 【设计模式】—— 适配器模式Adapter

    模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...

  7. 『设计模式』适配器模式(Adapter)

    23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...

  8. 设计模式-结构型模式 适配器模式adapter

    设配器模式分为 类适配器模式 对象适配器模式,主要目的是 将适配者 与目标接口结合 类适配器模式: 目标接口 适配者 适配器 缺点:耦合度高 对象适配器:对类适配器 进行修改 继承改为聚合 关系 降低 ...

  9. 适配器模式(Adapter Class/Object)

    适配器模式(Adapter Class/Object) 是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作. 举个例子:macbook pro有一个HDMI接口,一条H ...

最新文章

  1. vue-video-player文档_vue的video插件vue-video-player
  2. python计算每月工资-python税后工资计算器
  3. 关于调用子函数给主函数指针分配内存
  4. 数据挖掘 —— 模型评估
  5. Java的poi的excel导入怎么验证整型格式的单元格
  6. PHP快速排序及其时间复杂度
  7. 【Python成长之路】python 基础篇 -- 装饰器【华为云分享】
  8. leach算法的实现过程_LEACH分簇算法实现和能量控制算法实现(示例代码)
  9. ad域管理与维护_windows server2012创建AD域服务器
  10. 什么软件能测试电脑能不能玩lol,怎么测试自己电脑能不能玩英雄联盟
  11. 联想微型计算机改win7,[系统帮助]lenovo联想WIN8改WIN7详细图文全教程
  12. 使用“#define _GNU_SOURCE” 是什么意思?
  13. HP惠普笔记本Microsoft ACPI Compliant System未知设备的解决办法
  14. Linux系统进程优化理论与方法
  15. bag java_Bag.java · linbo/Bag_Queue_Stack_Java - Gitee.com
  16. 一文说尽NB—IOT和Lora
  17. 【基础知识】HTML5 Canvas小项目时钟的简单实现(图文、演示)
  18. xiangmu--WAD
  19. 忆鲁迅《故乡》中的一句话
  20. 微信公众平台-微信发送朋友、分享到QQ、分享QQ空间、分享腾讯微博-JSSDk接口

热门文章

  1. 德力西电气签约永洪科技,数字化赋能电气制造新征程
  2. 内容创业时代,粉丝已死
  3. 网页从web服务器受到的威胁,[多选] Web从web服务器方面和浏览器方面受到的威胁主要来自()。...
  4. java equals 区别_Java中equals和==的区别
  5. 保险运用计算机的工作干什么,关于计算机在保险业务中的应用研究
  6. python 模块 多线程 单例_python的单例模式
  7. 倾向得分匹配的stata命令_培训对工资是否影响显著:倾向得分匹配法(PSM)及stata实现...
  8. 如何解决java乱码_java如何解决乱码
  9. Linux检查镜像,Shell脚本实现检测Cygwin最快的镜像站点
  10. 项目编译失败_Swift源码编译让底层更清晰