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