diff --git a/DesignPatternGuru/DesignPatternGuru.sln b/DesignPatternGuru/DesignPatternGuru.sln
new file mode 100644
index 0000000..8129d49
--- /dev/null
+++ b/DesignPatternGuru/DesignPatternGuru.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32929.385
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FactoryMethod", "FactoryMethod\FactoryMethod.csproj", "{4F58C486-7121-435B-B7B2-F3ADD0FBE2AE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4F58C486-7121-435B-B7B2-F3ADD0FBE2AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4F58C486-7121-435B-B7B2-F3ADD0FBE2AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4F58C486-7121-435B-B7B2-F3ADD0FBE2AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4F58C486-7121-435B-B7B2-F3ADD0FBE2AE}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {3E5A9C6B-2E8A-466E-B5E0-4379902EFFAC}
+ EndGlobalSection
+EndGlobal
diff --git a/DesignPatternGuru/DesignPatternGuru/DesignPatternGuru.csproj b/DesignPatternGuru/DesignPatternGuru/DesignPatternGuru.csproj
new file mode 100644
index 0000000..74abf5c
--- /dev/null
+++ b/DesignPatternGuru/DesignPatternGuru/DesignPatternGuru.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/DesignPatternGuru/DesignPatternGuru/Program.cs b/DesignPatternGuru/DesignPatternGuru/Program.cs
new file mode 100644
index 0000000..3751555
--- /dev/null
+++ b/DesignPatternGuru/DesignPatternGuru/Program.cs
@@ -0,0 +1,2 @@
+// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git a/DesignPatternGuru/FactoryMethod/Client.cs b/DesignPatternGuru/FactoryMethod/Client.cs
new file mode 100644
index 0000000..d72e643
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Client.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FactoryMethod
+{
+ internal class Client
+ {
+ public void Main()
+ {
+ Console.WriteLine("App: Launched with the ConcreateCreator1");
+ ClinetCode(new ConcreateCreator1());
+
+ Console.WriteLine("---");
+
+ Console.WriteLine("App: Launched with the ConcreateCreator2");
+ ClinetCode(new ConcreateCreator2());
+ }
+
+ private void ClinetCode(Creator creator)
+ {
+ Console.WriteLine($"Client: I'm not aware of the creator's class, " +
+ $"but it still works. {creator.SomeOperation()}");
+ }
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator1.cs b/DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator1.cs
new file mode 100644
index 0000000..85e3e63
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator1.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FactoryMethod.Product;
+
+namespace FactoryMethod.Creator.Creator
+{
+ internal class ConcreateCreator1 : Creator
+ {
+ public override IProduct FactoryMethod()
+ {
+ return new ConcreateProduct1();
+ }
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator2.cs b/DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator2.cs
new file mode 100644
index 0000000..5f36827
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator2.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FactoryMethod.Product;
+
+namespace FactoryMethod.Creator.Creator
+{
+ internal class ConcreateCreator2 : Creator
+ {
+ public override IProduct FactoryMethod()
+ {
+ return new ConcreateProduct2();
+ }
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/Creator/Creator.cs b/DesignPatternGuru/FactoryMethod/Creator/Creator.cs
new file mode 100644
index 0000000..1471d9b
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Creator/Creator.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FactoryMethod.Product;
+
+namespace FactoryMethod.Creator
+{
+ abstract internal class Creator
+ {
+ public abstract IProduct FactoryMethod();
+
+ public string SomeOperation()
+ {
+ var prodcut = FactoryMethod();
+ var result = $"Creator: The same creator's code has just worked with {prodcut.Operation()}";
+
+ return result;
+ }
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/FactoryMethod.csproj b/DesignPatternGuru/FactoryMethod/FactoryMethod.csproj
new file mode 100644
index 0000000..9ad2a07
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/FactoryMethod.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/DesignPatternGuru/FactoryMethod/Product/ConcreateProduct1.cs b/DesignPatternGuru/FactoryMethod/Product/ConcreateProduct1.cs
new file mode 100644
index 0000000..37b32b1
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Product/ConcreateProduct1.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FactoryMethod.Product
+{
+ internal class ConcreateProduct1 : IProduct
+ {
+ public string Operation()
+ {
+ return "{Result of ConcreateProduct1}";
+ }
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/Product/ConcreateProduct2.cs b/DesignPatternGuru/FactoryMethod/Product/ConcreateProduct2.cs
new file mode 100644
index 0000000..077154f
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Product/ConcreateProduct2.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FactoryMethod.Product
+{
+ internal class ConcreateProduct2 : IProduct
+ {
+ public string Operation()
+ {
+ return "{Result of ConcreateProduct2}";
+ }
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/Product/IProduct.cs b/DesignPatternGuru/FactoryMethod/Product/IProduct.cs
new file mode 100644
index 0000000..0b5879d
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Product/IProduct.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FactoryMethod.Product
+{
+ internal interface IProduct
+ {
+ public string Operation();
+ }
+}
diff --git a/DesignPatternGuru/FactoryMethod/Program.cs b/DesignPatternGuru/FactoryMethod/Program.cs
new file mode 100644
index 0000000..ad6e756
--- /dev/null
+++ b/DesignPatternGuru/FactoryMethod/Program.cs
@@ -0,0 +1,10 @@
+namespace FactoryMethod
+{
+ internal class Program
+ {
+ static void Main(string[] args)
+ {
+ new Client().Main();
+ }
+ }
+}
\ No newline at end of file