DEV Community

Abdullah Al Mahmud
Abdullah Al Mahmud

Posted on • Edited on

🔎Exploring Design Patterns: Adapter Pattern

General Structure:

Target (IJsonAdapter): The interface that clients expect to use

Adaptee (LegacyXmlSystem): The existing class that needs to be adapted

Adapter (XmlToJsonAdapter): The class that bridges between Target and Adaptee

Client: The code that works with the Target interface

public interface IJsonAdapter { string GetJsonData(); } // Adaptee: Legacy system that needs to be adapted public class LegacyXmlSystem { public string GetXmlData() { return "<data> some XML data </data>"; } } // Adapter: Adapter implementation public class XmlToJsonAdapter : IJsonAdapter { private LegacyXmlSystem _xmlSystem; public XmlToJsonAdapter(LegacyXmlSystem xmlSystem) { _xmlSystem = xmlSystem; } public string GetJsonData() { string xmlData = _xmlSystem.GetXmlData(); // converting xml to json return "{ data: some XML data converted to JSON }"; } } 
Enter fullscreen mode Exit fullscreen mode

When to Use:

  • Integrating legacy code with new systems
  • Making incompatible interfaces work together
  • Reusing existing classes with incompatible interfaces
  • Converting data formats between systems
  • Maintaining backward compatibility

Benefits:

  • Promotes reusability of existing code
  • Provides clean separation of concerns
  • Makes incompatible code work together without modifying source
  • Follows Single Responsibility Principle
  • Enhances maintainability

Limitations:

  • Can add complexity to the codebase
  • May require creating multiple adapters for different interfaces
  • Could impact performance due to additional layer
  • Might make debugging more challenging
  • Not suitable when extensive interface modifications are needed

The real-world example in the code shows adapting XML data to JSON format. The pattern is particularly useful in scenarios like:

  • Database interface adaptations
  • Third-party library integration
  • API versioning
  • File format conversions
  • Payment gateway integrations

✨ You can find design pattern codes in this repository

✨ Exploring Design Patterns Other Posts

Top comments (0)