diff --git a/DesignPatternGuru/AbstractFactory/AbstractFactory.csproj b/DesignPatternGuru/AbstractFactory/AbstractFactory.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/AbstractFactory.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/DesignPatternGuru/AbstractFactory/Client.cs b/DesignPatternGuru/AbstractFactory/Client.cs new file mode 100644 index 0000000..6c16592 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Client.cs @@ -0,0 +1,32 @@ +using AbstractFactory.Factories; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory +{ + internal class Client + { + public void Main() + { + Console.WriteLine("Client: Testring client code with the first factory type..."); + ClientMethod(new ConcreteFactory1()); + + Console.WriteLine("---"); + + Console.WriteLine("Client: Testring client code with the second factory type..."); + ClientMethod(new ConcreteFactory2()); + } + + private void ClientMethod(IAbstractFactory factory) + { + var ProductA = factory.CreateProductA(); + var ProductB = factory.CreateProductB(); + + Console.WriteLine(ProductB.UsefulFuctionB()); + Console.WriteLine(ProductB.AnotherUsefulFunctionB(ProductA)); + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Factories/ConcreteFactory1.cs b/DesignPatternGuru/AbstractFactory/Factories/ConcreteFactory1.cs new file mode 100644 index 0000000..00d1ae3 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Factories/ConcreteFactory1.cs @@ -0,0 +1,24 @@ +using AbstractFactory.Products; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Factories +{ + internal class ConcreteFactory1 : IAbstractFactory + { + public IAbstractProductA CreateProductA() + { + return new ConcreteProductA1(); + + } + + public IAbstractProductB CreateProductB() + { + return new ConcreteProductB1(); + + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Factories/ConcreteFactory2.cs b/DesignPatternGuru/AbstractFactory/Factories/ConcreteFactory2.cs new file mode 100644 index 0000000..c7aae13 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Factories/ConcreteFactory2.cs @@ -0,0 +1,24 @@ +using AbstractFactory.Products; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Factories +{ + internal class ConcreteFactory2 : IAbstractFactory + { + public IAbstractProductA CreateProductA() + { + return new ConcreteProductA2(); + + } + + public IAbstractProductB CreateProductB() + { + return new ConcreteProductB2(); + + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Factories/IAbstractFactory.cs b/DesignPatternGuru/AbstractFactory/Factories/IAbstractFactory.cs new file mode 100644 index 0000000..754124f --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Factories/IAbstractFactory.cs @@ -0,0 +1,15 @@ +using AbstractFactory.Products; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Factories +{ + internal interface IAbstractFactory + { + IAbstractProductA CreateProductA(); + IAbstractProductB CreateProductB(); + } +} diff --git a/DesignPatternGuru/AbstractFactory/Products/ConcreteProductA1.cs b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductA1.cs new file mode 100644 index 0000000..0929f77 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductA1.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Products +{ + internal class ConcreteProductA1 : IAbstractProductA + { + public string UsefulFunctionA() + { + return "The result of the product A1."; + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Products/ConcreteProductA2.cs b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductA2.cs new file mode 100644 index 0000000..764e634 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductA2.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Products +{ + internal class ConcreteProductA2 : IAbstractProductA + { + public string UsefulFunctionA() + { + return "The result of the product A2."; + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Products/ConcreteProductB1.cs b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductB1.cs new file mode 100644 index 0000000..f4a95b6 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductB1.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Products +{ + internal class ConcreteProductB1 : IAbstractProductB + { + public string AnotherUsefulFunctionB(IAbstractProductA collaborator) + { + var result = collaborator.UsefulFunctionA(); + + return $"The result of the B1 collaborating with the ({result})"; + } + + public string UsefulFuctionB() + { + return "The result of the product B1."; + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Products/ConcreteProductB2.cs b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductB2.cs new file mode 100644 index 0000000..e005d2c --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Products/ConcreteProductB2.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Products +{ + internal class ConcreteProductB2 : IAbstractProductB + { + public string AnotherUsefulFunctionB(IAbstractProductA collaborator) + { + var result = collaborator.UsefulFunctionA(); + + return $"The result of the B2 collaborating with the ({result})"; + } + + public string UsefulFuctionB() + { + return "The result of the product B2."; + } + } +} diff --git a/DesignPatternGuru/AbstractFactory/Products/IAbstractProductA.cs b/DesignPatternGuru/AbstractFactory/Products/IAbstractProductA.cs new file mode 100644 index 0000000..0947808 --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Products/IAbstractProductA.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Products +{ + internal interface IAbstractProductA + { + string UsefulFunctionA(); + } +} diff --git a/DesignPatternGuru/AbstractFactory/Products/IAbstractProductB.cs b/DesignPatternGuru/AbstractFactory/Products/IAbstractProductB.cs new file mode 100644 index 0000000..fbac04c --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Products/IAbstractProductB.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFactory.Products +{ + internal interface IAbstractProductB + { + string UsefulFuctionB(); + string AnotherUsefulFunctionB(IAbstractProductA collaborator); + } +} diff --git a/DesignPatternGuru/AbstractFactory/Program.cs b/DesignPatternGuru/AbstractFactory/Program.cs new file mode 100644 index 0000000..931d48d --- /dev/null +++ b/DesignPatternGuru/AbstractFactory/Program.cs @@ -0,0 +1,10 @@ +namespace AbstractFactory +{ + internal class Program + { + static void Main(string[] args) + { + new Client().Main(); + } + } +} \ No newline at end of file diff --git a/DesignPatternGuru/DesignPatternGuru.sln b/DesignPatternGuru/DesignPatternGuru.sln index 8129d49..ee816a2 100644 --- a/DesignPatternGuru/DesignPatternGuru.sln +++ b/DesignPatternGuru/DesignPatternGuru.sln @@ -5,6 +5,8 @@ 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 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbstractFactory", "AbstractFactory\AbstractFactory.csproj", "{8310590F-E10F-4845-8737-AF3CEF4583B1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {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 + {8310590F-E10F-4845-8737-AF3CEF4583B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8310590F-E10F-4845-8737-AF3CEF4583B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8310590F-E10F-4845-8737-AF3CEF4583B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8310590F-E10F-4845-8737-AF3CEF4583B1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE