Friday, November 8, 2019

Adapter Pattern c#

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?

  1. Allow a system to use classes of another system that is incompatible with it.
  2. Allow communication between a new and already existing system which are independent of each other
  3. Ado.Net SqlAdapter, OracleAdapter, MySqlAdapter are the best example of Adapter Pattern.









No comments:

Post a Comment

Kafka setup in window

Here's a step-by-step guide on how to do it : 1. Prerequisites : Before you begin, make sure you have the following prerequisites inst...