Introduction
In this article, we will learn how we can replace long IF/ELSE or long SWITCH (long conditional statement) with polymorphism. This is also called RIP design pattern. RIP means Replace If with Polymorphism design pattern
Tools used for development
Long condition statement
In the below code snippet we can see a skill set which is suitable for a job opening in our company with a long condition statement, (i.e, switch statement we have used). Currently we have only two requirements. If we need to add more skills to switch statement then the conditions will keep on increasing.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter your skill set for job opening (like JavaScript,c#,Net)");
string knowledge = Console.ReadLine();
switch (knowledge.ToLower())
{
case "javascript":
Console.WriteLine("Requirement matches");
break;
case "c#":
Console.WriteLine("Requirement matches");
break;
default:
Console.WriteLine("Requirement does not matches");
break;
}
Console.ReadKey();
}
}
Replacing condition statement with polymorphism
We will create a Simple Factory design pattern, with class name as SimpleFactory. We will create a skill Dictionary and in constructor add all the skill sets and return the value, as shown in below code snippet.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter your skill set for job opening (like JavaScript,c#,Net)");
string knowledge = Console.ReadLine();
Console.WriteLine(SimpleFactory.Create(knowledge.ToLower()));
Console.ReadKey();
}
}
public class SimpleFactory
{
private static Dictionary<string, string> skill = new Dictionary<string, string>();
static SimpleFactory()
{
skill.Add("javascript", "Requirement matches");
skill.Add("c#", "Requirement matches");
}
public static string Create(string CustType)
{
// Design Pattern : RIP Pattern
return skill[CustType];
}
}
Implementing lazy loading
In the above code, we have seen how we replace condition statement with Dictionary. Now we will see how we implement lazy loading.
public static class SimpleFactory
{
private static Dictionary<string, string> skills= new Dictionary<string, string>();
public static string Create(string skillType)
{
if (skills.Count == 0)
{
skills.Add("javascript", "Requirement matches");
skills.Add("c#", "Requirement matches");
}
// Design Pattern : RIP Pattern
return skills[skillType];
}
}
Implementing lazy loading using Lazy class
In the above code, we have seen how we used lazy loading. Now we will see how we implement lazy loading using Lazy class from .Net framework.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter your skill set for job opening (like JavaScript,c#,Net)");
string knowledge = Console.ReadLine();
Console.WriteLine(SimpleFactory.Create(knowledge.ToLower()));
Console.ReadKey();
}
}
public static class SimpleFactory
{
private static Lazy<Dictionary<string, string>> skill = null;
static SimpleFactory()
{
skill = new Lazy<Dictionary<string, string>>(() => LoadCustomer());
}
private static Dictionary<string, string> LoadCustomer()
{
Dictionary<string, string> temp = new Dictionary<string, string>();
temp.Add("javascript", "Requirement matches");
temp.Add("c#", "Requirement matches");
return temp;
}
public static string Create(string skillType)
{
// Design Pattern : RIP Pattern
return skill.Value[skillType];
}
}
Summary
In this article, we have learned how we can replace long IF/ELSE or long SWITCH (long conditional statement) with polymorphism.