{"id":18385343,"url":"https://github.com/surender1987/adapterdesignpattern","last_synced_at":"2026-04-29T04:33:10.593Z","repository":{"id":178041596,"uuid":"661253638","full_name":"Surender1987/AdapterDesignPattern","owner":"Surender1987","description":"Adapter design pattern","archived":false,"fork":false,"pushed_at":"2023-07-02T10:18:33.000Z","size":6,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-03T13:05:29.138Z","etag":null,"topics":["adapter-design-pattern","adapter-pattern","code","design-patterns","dotnet","dotnetcore"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Surender1987.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-07-02T09:15:50.000Z","updated_at":"2023-07-02T10:23:25.000Z","dependencies_parsed_at":"2023-07-04T18:46:55.875Z","dependency_job_id":null,"html_url":"https://github.com/Surender1987/AdapterDesignPattern","commit_stats":null,"previous_names":["surender1987/adapterdesignpattern"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Surender1987/AdapterDesignPattern","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Surender1987%2FAdapterDesignPattern","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Surender1987%2FAdapterDesignPattern/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Surender1987%2FAdapterDesignPattern/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Surender1987%2FAdapterDesignPattern/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Surender1987","download_url":"https://codeload.github.com/Surender1987/AdapterDesignPattern/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Surender1987%2FAdapterDesignPattern/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32411241,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T03:46:11.172Z","status":"ssl_error","status_checked_at":"2026-04-29T03:37:55.317Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adapter-design-pattern","adapter-pattern","code","design-patterns","dotnet","dotnetcore"],"created_at":"2024-11-06T01:17:20.831Z","updated_at":"2026-04-29T04:33:10.588Z","avatar_url":"https://github.com/Surender1987.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Adapter design pattern \nAdapter design pattern is a structural design pattern which enables two objects with incompatible interfaces works together. It converts interface of one object to another objects interface. The main components for adapter design patterns are\n1. **Target** It defines the interface that client expect to interact\n2. **Adapter** Adapter is a class that convert interface client expecting to be interact to interface adaptee need to work\n3. **Adaptee** Adaptee is the legacy class which has interface that incompatible with client's interface\n\nThis design pattern helps when we have legacy application or code from other teams that we can not modify.\n\n## Implementation of adapter design pattern \nSuppose we are working in an e-commerce plateform and we need to process payements using multiple payment gateways like PayPal and Stripe. Each payment gateway has its own interface, to provide a unified interface we can use adapter design pattern\n1. Target - there is common interface IPaymentProcessor\n```\nnamespace AdapterDesignPattern\n{\n    /// \u003csummary\u003e\n    /// Target : target component defines unified interface for client.\n    /// \u003c/summary\u003e\n    public interface IPaymentProcessor\n    {\n        void ProcessPayments(double amnt);\n    }\n}\n```\n2. Adapter - Classes that change one interface to another, here we have PayPalPaymentGatewayAdapter \u0026 StripePaymentGatewayAdapter which converts IProcessPayment interface to gateways interfaces\nPayPalPaymentGatewayAdapter.cs\n```\nnamespace AdapterDesignPattern\n{\n    /// \u003csummary\u003e\n    /// Adapter: PayPal gateway adapter, it will convert client interface to PayPal's interface\n    /// \u003c/summary\u003e\n    public class PayPalPaymentGatewayAdapter : IPaymentProcessor\n    {\n        private readonly PayPalPaymentGateway payPalPaymentGateway;\n\n        /// \u003csummary\u003e\n        /// Create instance for \u003csee cref=\"PayPalPaymentGateway\"/\u003e\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"payPalPaymentGateway\"\u003e\u003c/param\u003e\n        public PayPalPaymentGatewayAdapter(PayPalPaymentGateway payPalPaymentGateway)\n        {\n            this.payPalPaymentGateway = payPalPaymentGateway;\n        }\n\n        /// \u003csummary\u003e\n        /// Process payments\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"amnt\"\u003e\u003c/param\u003e\n        public void ProcessPayments(double amnt)\n        {\n            this.payPalPaymentGateway.MakePayment(amnt);\n        }\n    }\n}\n```\n\nStripePaymentGatewayAdapter.cs\n```\nnamespace AdapterDesignPattern\n{\n    /// \u003csummary\u003e\n    /// Adapter: adapter for Stripe payment gateway that convert target interface to interface supported by Stripe\n    /// \u003c/summary\u003e\n    public class StripePaymentGatewayAdapter : IPaymentProcessor\n    {\n        private readonly StripePaymentGateway stripePaymentGateway;\n\n        /// \u003csummary\u003e\n        /// Initialize instance for \u003csee cref=\"StripePaymentGatewayAdapter\"/\u003e\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"stripePaymentGateway\"\u003e\u003c/param\u003e\n        public StripePaymentGatewayAdapter(StripePaymentGateway stripePaymentGateway)\n        {\n            this.stripePaymentGateway = stripePaymentGateway;\n        }\n\n        /// \u003csummary\u003e\n        /// \n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"amnt\"\u003e\u003c/param\u003e\n        public void ProcessPayments(double amnt)\n        {\n            this.stripePaymentGateway.Change(amnt);\n        }\n    }\n}\n```\n3.  Adaptee - legacy or third party code that is not easy to change and available with incompatible interfaces\nPayPalPaymentGateway.cs\n```\nnamespace AdapterDesignPattern\n{\n    /// \u003csummary\u003e\n    /// Adaptee: PayPal payment gateway which requires interface different from client \n    /// \u003c/summary\u003e\n    public class PayPalPaymentGateway\n    {\n        /// \u003csummary\u003e\n        /// Method to make payments\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"amount\"\u003e\u003c/param\u003e\n        public void MakePayment(double amount)\n        {\n            Console.WriteLine($\"Payment of amount {amount} processed successfully.\");\n        }\n    }\n}\n```\n\nStripePaymentGateway.cs\n```\nnamespace AdapterDesignPattern\n{\n    /// \u003csummary\u003e\n    /// Adaptee: Stripe payment gateway which requires interface different from client \n    /// \u003c/summary\u003e\n    public class StripePaymentGateway\n    {\n        /// \u003csummary\u003e\n        /// Method to make payments\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"amount\"\u003e\u003c/param\u003e\n        public void Change(double amount)\n        {\n            Console.WriteLine($\"Payment of amount {amount} processed successfully by Stripe payment gateway.\");\n        }\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurender1987%2Fadapterdesignpattern","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsurender1987%2Fadapterdesignpattern","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurender1987%2Fadapterdesignpattern/lists"}