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