# What > **Adapter** is a structural design pattern that allows objects with incompatible interfaces to collaborate. Translator. # Why There are scenarios interfaces of different objects are different and cannot collaborate. An adapter is like a translator that enable them to use the same interface. # Example ## Different Data File Formats I am doing data analysis with data collected from multiple websites (in different formats, json, csv, xml, etc), I don't want to rewrite my data analysis library. Instead of making the data analysis library/algorithm support multiple data types, why don't we use adaptor/translator to make all data follow the same data structure. <img src="assets/image-20221029030300961.png" alt="image-20221029030300961" width="50%" /> ## SocketIO Redis Adapter [Redis adapter | Socket.IO](https://socket.io/docs/v4/redis-adapter/) # Where - When the interface of multiple objects that need to collaborate aren't the same. # Analogy Here is an analogy. A Chinese and and French president are having a meeting, there is a Chinese translator who know Chinese and English, and a French translator who know French and English. Then the 2 translators can communicate through English. In this analogy, English language is the bidirectional channel. The 2 translators are the adapters, and the 2 presidents are the 2 environments. ```mermaid graph TD subgraph Environment1[Environment 1] ChinesePresident[Chinese President] <--> ChineseTranslator[Chinese Translator] end subgraph ChannelLayer[Bidirectional Channel] English[English Language] end subgraph Environment2[Environment 2] FrenchTranslator[French Translator] <--> FrenchPresident[French President] end ChineseTranslator <--> English English <--> FrenchTranslator style ChinesePresident fill:#f9d5e5,stroke:#333 style FrenchPresident fill:#f9d5e5,stroke:#333 style ChineseTranslator fill:#d5e8f9,stroke:#333 style FrenchTranslator fill:#d5e8f9,stroke:#333 style English fill:#d5f9e8,stroke:#333 style ChannelLayer fill:#f5f5f5,stroke-dasharray: 5 5 ``` # Reference - [Adapter (refactoring.guru)](https://refactoring.guru/design-patterns/adapter)