diff --git a/design-patterns/Program.cs b/design-patterns/Program.cs index b3733bd..54c322e 100644 --- a/design-patterns/Program.cs +++ b/design-patterns/Program.cs @@ -1,8 +1,12 @@ -using design_patterns.src.Singleton; +using design_patterns.src.Factory; +using design_patterns.src.Singleton; using design_patterns.src.Singleton.EcommerceSample; Console.WriteLine("WELCOME TO DESIGN PATTERNS IN C#!"); Console.WriteLine("\n---------------- Singleton Pattern 🚀"); SingletonUsage.SampleOne(); -SingletonEcommerce.Usage(); \ No newline at end of file +SingletonEcommerce.Usage(); + +Console.WriteLine("\n---------------- Factory Pattern 🚀"); +FactoryNetworkUsage.SampleOne(); \ No newline at end of file diff --git a/design-patterns/README.md b/design-patterns/README.md index 213b60a..532a726 100644 --- a/design-patterns/README.md +++ b/design-patterns/README.md @@ -5,7 +5,9 @@ In this section, Design patterns in c# will be included. ## Topics - Singleton Pattern +- Factory Pattern ## Resources - https://www.c-sharpcorner.com/UploadFile/8911c4/singleton-design-pattern-in-C-Sharp/ +- https://www.c-sharpcorner.com/article/factory-design-pattern-in-c-sharp/ diff --git a/design-patterns/src/Factory/FactoryNetworkUsage.cs b/design-patterns/src/Factory/FactoryNetworkUsage.cs new file mode 100644 index 0000000..23ca578 --- /dev/null +++ b/design-patterns/src/Factory/FactoryNetworkUsage.cs @@ -0,0 +1,23 @@ +using design_patterns.src.Factory.NetworkFactoryPath; + +namespace design_patterns.src.Factory +{ + /// + /// Factory Pattern Network usage + /// + public static class FactoryNetworkUsage + { + public static void SampleOne() + { + Console.WriteLine("\nFactory Pattern Usage : "); + NetworkFactory networkFactory = new(); + var ping = networkFactory.GetNetworkInstance("ping"); + var dns = networkFactory.GetNetworkInstance("dns"); + var arp = networkFactory.GetNetworkInstance("arp"); + + ping.SendRequest("11111", 1); + dns.SendRequest("22222", 2); + arp.SendRequest("33333", 3); + } + } +} \ No newline at end of file diff --git a/design-patterns/src/Factory/NetworkFactory/NetworkFactory.cs b/design-patterns/src/Factory/NetworkFactory/NetworkFactory.cs new file mode 100644 index 0000000..de861f3 --- /dev/null +++ b/design-patterns/src/Factory/NetworkFactory/NetworkFactory.cs @@ -0,0 +1,36 @@ +using design_patterns.src.Factory.NetworkUtility; + +namespace design_patterns.src.Factory.NetworkFactoryPath +{ + public class NetworkFactory + { + /// + /// Get Network Instance + /// + /// + /// + public INetwork GetNetworkInstance(string type) + { + INetwork? obj = null; + + if (type.ToLower().Equals("ping")) + { + obj = new Ping(); + } + else if (type.ToLower().Equals("arp")) + { + obj = new ARP(); + } + else if (type.ToLower().Equals("dns")) + { + obj = new DNS(); + } + else + { + Console.WriteLine($"Type {type} is not found"); + } + + return obj!; + } + } +} \ No newline at end of file diff --git a/design-patterns/src/Factory/NetworkUtility/ARP.cs b/design-patterns/src/Factory/NetworkUtility/ARP.cs new file mode 100644 index 0000000..7663532 --- /dev/null +++ b/design-patterns/src/Factory/NetworkUtility/ARP.cs @@ -0,0 +1,18 @@ +namespace design_patterns.src.Factory.NetworkUtility +{ + /// + /// ARP Class + /// + public class ARP : INetwork + { + /// + /// ARP Send Request + /// + /// + /// + public void SendRequest(string ip, int timesSent) + { + Console.WriteLine("ARP request sent to " + ip + " " + timesSent + " times"); + } + } +} \ No newline at end of file diff --git a/design-patterns/src/Factory/NetworkUtility/DNS.cs b/design-patterns/src/Factory/NetworkUtility/DNS.cs new file mode 100644 index 0000000..c7747b0 --- /dev/null +++ b/design-patterns/src/Factory/NetworkUtility/DNS.cs @@ -0,0 +1,18 @@ +namespace design_patterns.src.Factory.NetworkUtility +{ + /// + /// DNS Class + /// + public class DNS : INetwork + { + /// + /// DNS Send Request + /// + /// + /// + public void SendRequest(string ip, int timesSent) + { + Console.WriteLine("DNS request sent to " + ip + " " + timesSent + " times"); + } + } +} \ No newline at end of file diff --git a/design-patterns/src/Factory/NetworkUtility/INetwork.cs b/design-patterns/src/Factory/NetworkUtility/INetwork.cs new file mode 100644 index 0000000..1e4731e --- /dev/null +++ b/design-patterns/src/Factory/NetworkUtility/INetwork.cs @@ -0,0 +1,10 @@ +namespace design_patterns.src.Factory.NetworkUtility +{ + /// + /// Abstracting with Network Interface + /// + public interface INetwork + { + void SendRequest(string ip, int timesSent); + } +} \ No newline at end of file diff --git a/design-patterns/src/Factory/NetworkUtility/Ping.cs b/design-patterns/src/Factory/NetworkUtility/Ping.cs new file mode 100644 index 0000000..cd676e3 --- /dev/null +++ b/design-patterns/src/Factory/NetworkUtility/Ping.cs @@ -0,0 +1,18 @@ +namespace design_patterns.src.Factory.NetworkUtility +{ + /// + /// Ping Class + /// + public class Ping : INetwork + { + /// + /// Ping Send Request + /// + /// + /// + public void SendRequest(string ip, int timesSent) + { + Console.WriteLine("Ping request sent to " + ip + " " + timesSent + " times"); + } + } +} \ No newline at end of file