diff --git a/DesignPatternGuru/Builder/Builder.csproj b/DesignPatternGuru/Builder/Builder.csproj new file mode 100644 index 0000000..9ad2a07 --- /dev/null +++ b/DesignPatternGuru/Builder/Builder.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/DesignPatternGuru/Builder/Builders/ConcreteBuilder.cs b/DesignPatternGuru/Builder/Builders/ConcreteBuilder.cs new file mode 100644 index 0000000..c56be29 --- /dev/null +++ b/DesignPatternGuru/Builder/Builders/ConcreteBuilder.cs @@ -0,0 +1,47 @@ +using Builder.Products; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder.Builder +{ + internal class ConcreteBuilder : IBuilder + { + private Product _product = new Product(); + + public ConcreteBuilder() + { + Reset(); + } + + public void Reset() + { + _product = new Product(); + } + + public void BuildPartA() + { + _product.Add("PartA1"); + } + + public void BuildPartB() + { + _product.Add("PartB1"); + } + + public void BuildPartC() + { + _product.Add("PartC1"); + } + + public Product GetProduct() + { + Product product = _product; + Reset(); + + return product; + } + } +} diff --git a/DesignPatternGuru/Builder/Builders/Director.cs b/DesignPatternGuru/Builder/Builders/Director.cs new file mode 100644 index 0000000..82ad080 --- /dev/null +++ b/DesignPatternGuru/Builder/Builders/Director.cs @@ -0,0 +1,31 @@ +using Builder.Builder; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder.Builders +{ + internal class Director + { + private IBuilder _builder; + + public IBuilder Builder + { + set { _builder = value; } + } + + public void BuildMinimalVariableProduct() + { + _builder.BuildPartA(); + } + + public void BuildMaximumVariableProduct() + { + _builder.BuildPartA(); + _builder.BuildPartB(); + _builder.BuildPartC(); + } + } +} diff --git a/DesignPatternGuru/Builder/Builders/IBuilder.cs b/DesignPatternGuru/Builder/Builders/IBuilder.cs new file mode 100644 index 0000000..4346b9a --- /dev/null +++ b/DesignPatternGuru/Builder/Builders/IBuilder.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder.Builder +{ + internal interface IBuilder + { + void BuildPartA(); + void BuildPartB(); + void BuildPartC(); + } +} diff --git a/DesignPatternGuru/Builder/Products/Product.cs b/DesignPatternGuru/Builder/Products/Product.cs new file mode 100644 index 0000000..f6981b6 --- /dev/null +++ b/DesignPatternGuru/Builder/Products/Product.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder.Products +{ + internal class Product + { + private List _parts = new List(); + + public void Add(string part) + { + _parts.Add(part); + } + + public string ListParts() + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < _parts.Count; i++) + { + sb.Append($"{_parts[i]}"); + if (i < _parts.Count - 1) + sb.Append(", "); + } + + return $"Product parts: {sb.ToString() + Environment.NewLine}"; + } + } +} diff --git a/DesignPatternGuru/Builder/Program.cs b/DesignPatternGuru/Builder/Program.cs new file mode 100644 index 0000000..20d1469 --- /dev/null +++ b/DesignPatternGuru/Builder/Program.cs @@ -0,0 +1,28 @@ +using Builder.Builder; +using Builder.Builders; + +namespace Builder +{ + internal class Program + { + static void Main(string[] args) + { + Director director = new Director(); + ConcreteBuilder builder = new ConcreteBuilder(); + director.Builder = builder; + + Console.WriteLine("Standard basic prodcut: "); + director.BuildMinimalVariableProduct(); + Console.WriteLine(builder.GetProduct().ListParts()); + + Console.WriteLine("Standard full featured product: "); + director.BuildMaximumVariableProduct(); + Console.WriteLine(builder.GetProduct().ListParts()); + + Console.WriteLine("Custom product: "); + builder.BuildPartA(); + builder.BuildPartC(); + Console.WriteLine(builder.GetProduct().ListParts()); + } + } +} \ No newline at end of file diff --git a/DesignPatternGuru/DesignPatternGuru.sln b/DesignPatternGuru/DesignPatternGuru.sln index ee816a2..4fac2cb 100644 --- a/DesignPatternGuru/DesignPatternGuru.sln +++ b/DesignPatternGuru/DesignPatternGuru.sln @@ -3,9 +3,11 @@ 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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AbstractFactory", "AbstractFactory\AbstractFactory.csproj", "{8310590F-E10F-4845-8737-AF3CEF4583B1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Builder", "Builder\Builder.csproj", "{FD2896D5-8199-4036-8D45-1CC0D3B4B79F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,6 +23,10 @@ Global {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 + {FD2896D5-8199-4036-8D45-1CC0D3B4B79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD2896D5-8199-4036-8D45-1CC0D3B4B79F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD2896D5-8199-4036-8D45-1CC0D3B4B79F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD2896D5-8199-4036-8D45-1CC0D3B4B79F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE