Skip to content

Commit

Permalink
add: factory pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
thutasann committed May 23, 2024
1 parent a431fd4 commit 06f1b76
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 2 deletions.
8 changes: 6 additions & 2 deletions design-patterns/Program.cs
Original file line number Diff line number Diff line change
@@ -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();
SingletonEcommerce.Usage();

Console.WriteLine("\n---------------- Factory Pattern 🚀");
FactoryNetworkUsage.SampleOne();
2 changes: 2 additions & 0 deletions design-patterns/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/
23 changes: 23 additions & 0 deletions design-patterns/src/Factory/FactoryNetworkUsage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using design_patterns.src.Factory.NetworkFactoryPath;

namespace design_patterns.src.Factory
{
/// <summary>
/// Factory Pattern Network usage
/// </summary>
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);
}
}
}
36 changes: 36 additions & 0 deletions design-patterns/src/Factory/NetworkFactory/NetworkFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using design_patterns.src.Factory.NetworkUtility;

namespace design_patterns.src.Factory.NetworkFactoryPath
{
public class NetworkFactory
{
/// <summary>
/// Get Network Instance
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
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!;
}
}
}
18 changes: 18 additions & 0 deletions design-patterns/src/Factory/NetworkUtility/ARP.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace design_patterns.src.Factory.NetworkUtility
{
/// <summary>
/// ARP Class
/// </summary>
public class ARP : INetwork
{
/// <summary>
/// ARP Send Request
/// </summary>
/// <param name="ip"></param>
/// <param name="timesSent"></param>
public void SendRequest(string ip, int timesSent)
{
Console.WriteLine("ARP request sent to " + ip + " " + timesSent + " times");
}
}
}
18 changes: 18 additions & 0 deletions design-patterns/src/Factory/NetworkUtility/DNS.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace design_patterns.src.Factory.NetworkUtility
{
/// <summary>
/// DNS Class
/// </summary>
public class DNS : INetwork
{
/// <summary>
/// DNS Send Request
/// </summary>
/// <param name="ip"></param>
/// <param name="timesSent"></param>
public void SendRequest(string ip, int timesSent)
{
Console.WriteLine("DNS request sent to " + ip + " " + timesSent + " times");
}
}
}
10 changes: 10 additions & 0 deletions design-patterns/src/Factory/NetworkUtility/INetwork.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace design_patterns.src.Factory.NetworkUtility
{
/// <summary>
/// Abstracting with Network Interface
/// </summary>
public interface INetwork
{
void SendRequest(string ip, int timesSent);
}
}
18 changes: 18 additions & 0 deletions design-patterns/src/Factory/NetworkUtility/Ping.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace design_patterns.src.Factory.NetworkUtility
{
/// <summary>
/// Ping Class
/// </summary>
public class Ping : INetwork
{
/// <summary>
/// Ping Send Request
/// </summary>
/// <param name="ip"></param>
/// <param name="timesSent"></param>
public void SendRequest(string ip, int timesSent)
{
Console.WriteLine("Ping request sent to " + ip + " " + timesSent + " times");
}
}
}

0 comments on commit 06f1b76

Please sign in to comment.