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