From a0f6934fed80f9e7a33d0fc22bd45036f07329b5 Mon Sep 17 00:00:00 2001 From: syneffort Date: Thu, 2 Mar 2023 15:15:36 +0900 Subject: [PATCH] Factory method --- DesignPatternGuru/DesignPatternGuru.sln | 25 +++++++++++++++++ .../DesignPatternGuru.csproj | 10 +++++++ .../DesignPatternGuru/Program.cs | 2 ++ DesignPatternGuru/FactoryMethod/Client.cs | 28 +++++++++++++++++++ .../Creator/ConcreateCreator1.cs | 17 +++++++++++ .../Creator/ConcreateCreator2.cs | 17 +++++++++++ .../FactoryMethod/Creator/Creator.cs | 22 +++++++++++++++ .../FactoryMethod/FactoryMethod.csproj | 10 +++++++ .../Product/ConcreateProduct1.cs | 16 +++++++++++ .../Product/ConcreateProduct2.cs | 16 +++++++++++ .../FactoryMethod/Product/IProduct.cs | 13 +++++++++ DesignPatternGuru/FactoryMethod/Program.cs | 10 +++++++ 12 files changed, 186 insertions(+) create mode 100644 DesignPatternGuru/DesignPatternGuru.sln create mode 100644 DesignPatternGuru/DesignPatternGuru/DesignPatternGuru.csproj create mode 100644 DesignPatternGuru/DesignPatternGuru/Program.cs create mode 100644 DesignPatternGuru/FactoryMethod/Client.cs create mode 100644 DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator1.cs create mode 100644 DesignPatternGuru/FactoryMethod/Creator/ConcreateCreator2.cs create mode 100644 DesignPatternGuru/FactoryMethod/Creator/Creator.cs create mode 100644 DesignPatternGuru/FactoryMethod/FactoryMethod.csproj create mode 100644 DesignPatternGuru/FactoryMethod/Product/ConcreateProduct1.cs create mode 100644 DesignPatternGuru/FactoryMethod/Product/ConcreateProduct2.cs create mode 100644 DesignPatternGuru/FactoryMethod/Product/IProduct.cs create mode 100644 DesignPatternGuru/FactoryMethod/Program.cs 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