DEV Community

Abdullah Al Mahmud
Abdullah Al Mahmud

Posted 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

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

đź‘‹ Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay