Adapter pattern acts as a bridge between two incompatible interfaces. This pattern involves a single class called adapter which is responsible for communication between two independent or incompatible interfaces.
UML Diagram & Implementation
The classes and objects participating in this pattern are:
- Target :- defines the domain-specific interface that Client uses.
- Adapter adapts the interface Adaptee to the Target interface.
- Adaptee Defines an existing interface that needs adapting.
- Client collaborates with objects conforming to the Target interface.
/// <summary> /// The 'Client' class /// </summary> public class ThirdPartyBillingSystem { private ITarget employeeSource; public ThirdPartyBillingSystem(ITarget employeeSource) { this.employeeSource = employeeSource; } public void ShowEmployeeList() { List<string> employee = employeeSource.GetEmployeeList(); //To DO: Implement you business logic Console.WriteLine("######### Employee List ##########"); foreach (var item in employee) { Console.Write(item); } } } /// <summary> /// The 'ITarget' interface /// </summary> public interface ITarget { List<string> GetEmployeeList(); } /// <summary> /// The 'Adaptee' class /// </summary> public class HRSystem { public string[][] GetEmployees() { string[][] employees = new string[4][]; employees[0] = new string[] { "100", "Deepak", "Team Leader" }; employees[1] = new string[] { "101", "Rohit", "Developer" }; employees[2] = new string[] { "102", "Gautam", "Developer" }; employees[3] = new string[] { "103", "Dev", "Tester" }; return employees; } } /// <summary> /// The 'Adapter' class /// </summary> public class EmployeeAdapter : HRSystem, ITarget { public List<string> GetEmployeeList() { List<string> employeeList = new List<string>(); string[][] employees = GetEmployees(); foreach (string[] employee in employees) { employeeList.Add(employee[0]); employeeList.Add(","); employeeList.Add(employee[1]); employeeList.Add(","); employeeList.Add(employee[2]); employeeList.Add("\n"); } return employeeList; } } ////// Adapter Design Pattern Demo /// class Program { static void Main(string[] args) { ITarget Itarget = new EmployeeAdapter(); ThirdPartyBillingSystem client = new ThirdPartyBillingSystem(Itarget); client.ShowEmployeeList(); Console.ReadKey(); } }
When to use it?
- Allow a system to use classes of another system that is incompatible with it.
- Allow communication between a new and already existing system which are independent of each other
- Ado.Net SqlAdapter, OracleAdapter, MySqlAdapter are the best example of Adapter Pattern.
No comments:
Post a Comment