Java设计模式--适配器模式

ゝ一世哀愁。 2023-01-12 15:55 161阅读 0赞

原文网址:Java设计模式—适配器模式_IT利刃出鞘的博客-CSDN博客

其他网址

【狂神说Java】通俗易懂的23种设计模式教学(停更)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

简介

生活实例

电脑没有网线接口,或者网线接口坏了。此时,可以用一个转接器,将网线转为USB。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaXlpbmcwY2FuZ2xhbmc_size_16_color_FFFFFF_t_70

代码(初版)

所有的类

20210415223337412.png

被适配的类

本处是网线。有一个请求方法:连接网线上网。

  1. package org.example.adaptor;
  2. public class Cable {
  3. public void request() {
  4. System.out.println("通过网线上网");
  5. }
  6. }

适配器类

接口

  1. package org.example.adaptor;
  2. public interface Adapter {
  3. public void handleRequest();
  4. }

实现类

  1. package org.example.adaptor;
  2. public class CableToUSB extends Cable implements Adapter{
  3. @Override
  4. public void handleRequest() {
  5. super.request();
  6. }
  7. }

客户端类

本处是电脑。想上网,却不能直接插网线。

要是能插网线,直接这样即可:

  1. package org.example.adaptor;
  2. public class Computer {
  3. public static void surfTheInternet(Cable cable) {
  4. cable.request();
  5. }
  6. public static void main(String[] args) {
  7. Cable cable = new Cable();
  8. surfTheInternet(cable);
  9. }
  10. }

不能插网线,所以,我们要插上适配器

  1. package org.example.adaptor;
  2. public class Computer {
  3. public static void surfTheInternet(Adapter adapter) {
  4. adapter.handleRequest();
  5. }
  6. public static void main(String[] args) {
  7. Adapter adapter = new CableToUSB();
  8. surfTheInternet(adapter);
  9. }
  10. }

测试

执行结果

  1. 通过网线上网

代码(优化版)

优化后的所有的类

20210415223252893.png

上边的适配器用了继承的方法,而java只能继承一个对象,也就是说,它只能适配网线。此时若有多个要适配的东西,那不完蛋了?

将被适配的类抽象

接口

  1. package org.example.adaptor;
  2. public interface Adaptee {
  3. public void request();
  4. }

实现类

  1. package org.example.adaptor;
  2. public class Cable implements Adaptee{
  3. public void request() {
  4. System.out.println("通过网线上网");
  5. }
  6. }

适配器组合而不是继承

  1. package org.example.adaptor;
  2. public class CableToUSB implements Adapter{
  3. private Adaptee adaptee;
  4. public CableToUSB(Adaptee adaptee) {
  5. this.adaptee = adaptee;
  6. }
  7. @Override
  8. public void handleRequest() {
  9. adaptee.request();
  10. }
  11. }

测试

  1. package org.example.adaptor;
  2. public class Computer {
  3. public static void surfTheInternet(Adapter adapter) {
  4. adapter.handleRequest();
  5. }
  6. public static void main(String[] args) {
  7. Adaptee adaptee = new Cable();
  8. Adapter adapter = new CableToUSB(adaptee);
  9. surfTheInternet(adapter);
  10. }
  11. }

执行结果

  1. 通过网线上网

发表评论

表情:
评论列表 (有 0 条评论,161人围观)

还没有评论,来说两句吧...

相关阅读