builder pattern

main
syneffort 2 years ago
parent ca0d1a5d2e
commit b8d8258a6b
  1. 10
      DesignPatternGuru/Builder/Builder.csproj
  2. 47
      DesignPatternGuru/Builder/Builders/ConcreteBuilder.cs
  3. 31
      DesignPatternGuru/Builder/Builders/Director.cs
  4. 15
      DesignPatternGuru/Builder/Builders/IBuilder.cs
  5. 31
      DesignPatternGuru/Builder/Products/Product.cs
  6. 28
      DesignPatternGuru/Builder/Program.cs
  7. 10
      DesignPatternGuru/DesignPatternGuru.sln

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -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;
}
}
}

@ -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();
}
}
}

@ -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();
}
}

@ -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<object> _parts = new List<object>();
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}";
}
}
}

@ -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());
}
}
}

@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385 VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1 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 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution 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}.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.ActiveCfg = Release|Any CPU
{8310590F-E10F-4845-8737-AF3CEF4583B1}.Release|Any CPU.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

Loading…
Cancel
Save