• 设计模式:适配器模式


    模式概述

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

    模式结构

    适配器模式由目标接口、适配者类、适配器类三个部分组成:

    目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
    适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
    适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

    在这里插入图片描述

    实现代码

    类适配器模式可采用多重继承方式实现,如 C++ 可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口;Java 不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。

    有两个类Circle和Square,分别实现了方法drawCircle()和drawSquare(),我们希望使用一个统一的接口方法draw()来调用Circle类和Square类中的两个方法,实现了两个适配器类CircleAdapter和SquareAdapter来按照接口的格式访问Circle类和Square类中的两个方法,实现代码如下:

    目标接口

    public interface Shape {
        public void draw();
    }
    
    • 1
    • 2
    • 3

    适配者类

    public class Circle {
        public void drawCircle(){
            System.out.println("circle");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    public class Square {
        public void drawSquare(){
            System.out.println("square");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    适配器类

    public class CircleAdapter implements Shape{
        private Circle circle;
        public CircleAdapter(){
            circle = new Circle();
        }
        @Override
        public void draw() {
            circle.drawCircle();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    public class SquareAdapter implements Shape{
        private Square square;
        public SquareAdapter(){
            square = new Square();
        }
        @Override
        public void draw() {
            square.drawSquare();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试类(客户端)

    public class Demo {
        public static void main(String[] args) {
            Shape circle = (Shape)new CircleAdapter();
            Shape square = (Shape)new SquareAdapter();
            
            circle.draw();
            square.draw();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    应用场景

    以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。

    使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

    模式扩展

    适配器模式可扩展为双向适配器模式,双向适配器类既可以把适配者接口转换成目标接口,也可以把目标接口转换成适配者接口。

    在这里插入图片描述

  • 相关阅读:
    字符串-算法总结
    Linux:最全的开发常用命令
    基于循环神经网络空中目标意图识别实现(附源码)
    win10错误代码0x80070005解决方法
    想学python爬虫,有没有推荐的书籍?
    MySQL对于表的介绍、基本概念与操作
    硬链接及软连接引出的inode
    移动流量的爆发式增长,社交电商如何选择商业模式
    常用排序算法
    EG边缘计算网关连接纵横云3.0物联网平台(MQTT协议)
  • 原文地址:https://blog.csdn.net/weixin_49346755/article/details/125467573