java设计模式之浅谈适配器模式

作者:RYGAR 时间:2023-11-19 14:46:26 

一、结构型模式

结构型模式有什么好处?
从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题

二、适配器模式

USB网线转换器

java设计模式之浅谈适配器模式

三、什么是适配器模式?

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

四、角色分析

目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口
需要适配的类:需要适配的类或适配者类
适配器:通过包装一个需要适配的对象,把原接口转换成目标对象!
例子:

适配的类:网线


package com.jialidun.gof.adapter;

//要被适配的类:网线
public class Adaptee {

public void request(){
       System.out.println("连接网线上网!");
   }
}

接口转换器的抽象方法


package com.jialidun.gof.adapter;

//接口转换器的抽象实现
public interface NetToUsb {

//作用:处理请求 网线插到USB上
   public void hanleRequest();

}

真正的适配器,需要连接USB,连接网线


package com.jialidun.gof.adapter;

//真正的适配器,需要连接USB,连接网线
//方式1 继承(类适配器、单继承)
public class Adapter extends Adaptee implements NetToUsb{

@Override
   public void hanleRequest() {
       super.request();//可以上网了
   }
}

创建客户端,需要上网,网线不匹配


package com.jialidun.gof.adapter;

//客户端类:想上网,插不上网线
public class Computer {

//我们的电脑需要连接上转接器才可以上网
   public void net(NetToUsb adapter){
       //上网的具体实现,找一个转接头

adapter.hanleRequest();

}

public static void main(String[] args) {
       //电脑  适配器  网线
       Computer computer = new Computer();//电脑
       Adaptee adaptee = new Adaptee();//网线
       Adapter adapter = new Adapter();//转接器

computer.net(adapter);

}
}

上面的例子有局限性,尽量不使用继承,修改方法

修改适配器


package com.jialidun.gof.adapter;

//方式2  组合(对象适配器、常用)
public class Adaapter2 implements NetToUsb{
   private Adaptee adaptee;

public Adaapter2(Adaptee adaptee){
       this.adaptee = adaptee;
   }

@Override
   public void hanleRequest() {
       adaptee.request();
   }
}

客户端


package com.jialidun.gof.adapter;

//客户端类:想上网,插不上网线
public class Computer {

//我们的电脑需要连接上转接器才可以上网
   public void net(NetToUsb adapter){
       //上网的具体实现,找一个转接头

adapter.hanleRequest();

}

public static void main(String[] args) {
       //电脑  适配器  网线
//        Computer computer = new Computer();//电脑
//        Adaptee adaptee = new Adaptee();//网线
//        Adapter adapter = new Adapter();//转接器
//
//        computer.net(adapter);

Computer computer = new Computer();//电脑
       Adaptee adaptee = new Adaptee();//网线
       Adaapter2 adaapter2 = new Adaapter2(adaptee);
       adaapter2.hanleRequest();

}
}

java设计模式之浅谈适配器模式

五、对象适配器有哪些优点

1.一个对象适配器可以把多个不同的适配者适配到同一个目标。

2.可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据"里氏替换原则",适配者的子类也可通过该适配器进行适配。

六、类适配器缺点

对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

七、使用场景

系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需求,甚至没有这些类的源代码。
想创建一个重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
例如SpringMVC中DispacherServlet、HandlerAdpter等

来源:https://blog.csdn.net/m0_51067047/article/details/117569251

标签:java,适配器模式
0
投稿

猜你喜欢

  • c#取得控制台应用程序根目录

    2023-06-16 14:25:44
  • 通过Java实现在Word中创建可填充表单

    2023-08-05 21:11:40
  • Android中TimePicker与DatePicker时间日期选择组件的使用实例

    2023-08-07 01:35:15
  • Mybatis-Spring源码分析图解

    2023-07-18 13:35:07
  • C# Invoke,begininvoke的用法详解

    2023-07-21 01:55:55
  • Java Property类使用详解

    2023-11-06 21:52:57
  • Android学习笔记-保存数据到SQL数据库中(Saving Data in SQL Databases)

    2023-07-28 08:32:20
  • Linux下g++编译与使用静态库和动态库的方法

    2023-06-21 13:41:46
  • IntelliJ IDEA 下载安装超详细教程(推荐)

    2023-11-19 23:50:16
  • Android实现人脸支付的示例代码

    2023-07-30 14:23:52
  • Kotlin编程基础语法编码规范

    2023-06-20 16:50:07
  • SpringBoot自动装配原理详解

    2023-07-03 05:49:08
  • Kotlin中常见内联扩展函数的使用方法教程

    2023-07-04 13:46:12
  • 详解springboot和vue前后端分离开发跨域登陆问题

    2023-08-07 00:48:38
  • SpringBoot中打war包需要注意事项

    2023-11-05 19:44:42
  • 分享Java常用开发编辑器工具

    2023-11-06 07:35:37
  • 详解Java如何实现小顶堆和大顶堆

    2023-11-10 04:03:05
  • @valid 无法触发BindingResult的解决

    2023-08-10 09:16:12
  • 使用Java实现qq邮箱发送邮件

    2023-10-14 18:24:36
  • Android Java try catch 失效问题及解决

    2023-06-17 17:07:33
  • asp之家 软件编程 m.aspxhome.com