Skip to content

Commit 571e330

Browse files
committed
Builder pattern
1 parent 3716b9a commit 571e330

9 files changed

+240
-0
lines changed

Creational/Builder/Builder.csproj

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5+
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
6+
<ProductVersion>8.0.30703</ProductVersion>
7+
<SchemaVersion>2.0</SchemaVersion>
8+
<ProjectGuid>{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}</ProjectGuid>
9+
<OutputType>Exe</OutputType>
10+
<AppDesignerFolder>Properties</AppDesignerFolder>
11+
<RootNamespace>Builder</RootNamespace>
12+
<AssemblyName>Builder</AssemblyName>
13+
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
14+
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
15+
<FileAlignment>512</FileAlignment>
16+
</PropertyGroup>
17+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
18+
<PlatformTarget>x86</PlatformTarget>
19+
<DebugSymbols>true</DebugSymbols>
20+
<DebugType>full</DebugType>
21+
<Optimize>false</Optimize>
22+
<OutputPath>bin\Debug\</OutputPath>
23+
<DefineConstants>DEBUG;TRACE</DefineConstants>
24+
<ErrorReport>prompt</ErrorReport>
25+
<WarningLevel>4</WarningLevel>
26+
</PropertyGroup>
27+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
28+
<PlatformTarget>x86</PlatformTarget>
29+
<DebugType>pdbonly</DebugType>
30+
<Optimize>true</Optimize>
31+
<OutputPath>bin\Release\</OutputPath>
32+
<DefineConstants>TRACE</DefineConstants>
33+
<ErrorReport>prompt</ErrorReport>
34+
<WarningLevel>4</WarningLevel>
35+
</PropertyGroup>
36+
<ItemGroup>
37+
<Reference Include="System" />
38+
<Reference Include="System.Core" />
39+
<Reference Include="System.Xml.Linq" />
40+
<Reference Include="System.Data.DataSetExtensions" />
41+
<Reference Include="Microsoft.CSharp" />
42+
<Reference Include="System.Data" />
43+
<Reference Include="System.Xml" />
44+
</ItemGroup>
45+
<ItemGroup>
46+
<Compile Include="Cook.cs" />
47+
<Compile Include="HawaiianPizzaBuilder.cs" />
48+
<Compile Include="Pizza.cs" />
49+
<Compile Include="PizzaBuilder.cs" />
50+
<Compile Include="Program.cs" />
51+
<Compile Include="Properties\AssemblyInfo.cs" />
52+
<Compile Include="SpicyPizzaBuilder.cs" />
53+
</ItemGroup>
54+
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
55+
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
56+
Other similar extension points exist, see Microsoft.Common.targets.
57+
<Target Name="BeforeBuild">
58+
</Target>
59+
<Target Name="AfterBuild">
60+
</Target>
61+
-->
62+
</Project>

Creational/Builder/Cook.cs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace Builder {
2+
3+
class Cook {
4+
5+
private PizzaBuilder _pizzaBuilder;
6+
7+
public void SetPizzaBuilder(PizzaBuilder pb) {
8+
this._pizzaBuilder = pb;
9+
}
10+
11+
public Pizza GetPizza() {
12+
return this._pizzaBuilder.GetPizza();
13+
}
14+
15+
public void ConstructPizza() {
16+
this._pizzaBuilder.CreateNewPizzaProduct();
17+
this._pizzaBuilder.BuildDough();
18+
this._pizzaBuilder.BuildSauce();
19+
this._pizzaBuilder.BuildTopping();
20+
}
21+
}
22+
}
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace Builder {
2+
3+
class HawaiianPizzaBuilder : PizzaBuilder {
4+
5+
public override void BuildDough() {
6+
this.Pizza.Dough = "cross";
7+
}
8+
9+
public override void BuildSauce() {
10+
this.Pizza.Sauce = "mild";
11+
}
12+
13+
public override void BuildTopping() {
14+
this.Pizza.Topping = "ham+pineapple";
15+
}
16+
}
17+
}

Creational/Builder/Pizza.cs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
namespace Builder {
2+
3+
public class Pizza {
4+
5+
private string _dough = string.Empty;
6+
private string _sauce = string.Empty;
7+
private string _topping = string.Empty;
8+
9+
public string Dough {
10+
get {
11+
return this._dough;
12+
}
13+
set {
14+
this._dough = value;
15+
}
16+
}
17+
18+
public string Sauce {
19+
get {
20+
return this._sauce;
21+
}
22+
set {
23+
this._sauce = value;
24+
}
25+
}
26+
27+
public string Topping {
28+
get {
29+
return this._topping;
30+
}
31+
set {
32+
this._topping = value;
33+
}
34+
}
35+
}
36+
}

Creational/Builder/PizzaBuilder.cs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace Builder {
2+
3+
abstract class PizzaBuilder {
4+
5+
protected Pizza Pizza;
6+
7+
public Pizza GetPizza() {
8+
return this.Pizza;
9+
}
10+
11+
public void CreateNewPizzaProduct() {
12+
this.Pizza = new Pizza();
13+
}
14+
15+
public abstract void BuildDough();
16+
public abstract void BuildSauce();
17+
public abstract void BuildTopping();
18+
}
19+
}

Creational/Builder/Program.cs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace Builder {
2+
3+
class Program {
4+
5+
static void Main(string[] args) {
6+
PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
7+
var cook = new Cook();
8+
cook.SetPizzaBuilder(hawaiianPizzaBuilder);
9+
cook.ConstructPizza();
10+
// create the product
11+
var hawaiian = cook.GetPizza();
12+
13+
PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
14+
cook.SetPizzaBuilder(spicyPizzaBuilder);
15+
cook.ConstructPizza();
16+
// create another product
17+
var spicy = cook.GetPizza();
18+
}
19+
20+
}
21+
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System.Reflection;
2+
using System.Runtime.CompilerServices;
3+
using System.Runtime.InteropServices;
4+
5+
// General Information about an assembly is controlled through the following
6+
// set of attributes. Change these attribute values to modify the information
7+
// associated with an assembly.
8+
[assembly: AssemblyTitle("Builder")]
9+
[assembly: AssemblyDescription("")]
10+
[assembly: AssemblyConfiguration("")]
11+
[assembly: AssemblyCompany("")]
12+
[assembly: AssemblyProduct("Builder")]
13+
[assembly: AssemblyCopyright("Copyright © 2012")]
14+
[assembly: AssemblyTrademark("")]
15+
[assembly: AssemblyCulture("")]
16+
17+
// Setting ComVisible to false makes the types in this assembly not visible
18+
// to COM components. If you need to access a type in this assembly from
19+
// COM, set the ComVisible attribute to true on that type.
20+
[assembly: ComVisible(false)]
21+
22+
// The following GUID is for the ID of the typelib if this project is exposed to COM
23+
[assembly: Guid("fd240c1d-c55c-43de-95b7-c0eaf2abebab")]
24+
25+
// Version information for an assembly consists of the following four values:
26+
//
27+
// Major Version
28+
// Minor Version
29+
// Build Number
30+
// Revision
31+
//
32+
// You can specify all the values or you can default the Build and Revision Numbers
33+
// by using the '*' as shown below:
34+
// [assembly: AssemblyVersion("1.0.*")]
35+
[assembly: AssemblyVersion("1.0.0.0")]
36+
[assembly: AssemblyFileVersion("1.0.0.0")]
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace Builder {
2+
3+
class SpicyPizzaBuilder : PizzaBuilder {
4+
5+
public override void BuildDough() {
6+
this.Pizza.Dough = "pan baked";
7+
}
8+
9+
public override void BuildSauce() {
10+
this.Pizza.Sauce = "hot";
11+
}
12+
13+
public override void BuildTopping() {
14+
this.Pizza.Topping = "pepperoni + salami";
15+
}
16+
}
17+
}

DesignPatterns.sln

+9
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Creational", "Creational",
2929
EndProject
3030
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbstractFactory", "Creational\AbstractFactory\AbstractFactory.csproj", "{FF8A73BD-7DCB-46C1-8F83-EE84D65320B4}"
3131
EndProject
32+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Builder", "Creational\Builder\Builder.csproj", "{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}"
33+
EndProject
3234
Global
3335
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3436
Debug|Any CPU = Debug|Any CPU
@@ -111,6 +113,12 @@ Global
111113
{FF8A73BD-7DCB-46C1-8F83-EE84D65320B4}.Release|Any CPU.ActiveCfg = Release|x86
112114
{FF8A73BD-7DCB-46C1-8F83-EE84D65320B4}.Release|x86.ActiveCfg = Release|x86
113115
{FF8A73BD-7DCB-46C1-8F83-EE84D65320B4}.Release|x86.Build.0 = Release|x86
116+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}.Debug|Any CPU.ActiveCfg = Debug|x86
117+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}.Debug|x86.ActiveCfg = Debug|x86
118+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}.Debug|x86.Build.0 = Debug|x86
119+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}.Release|Any CPU.ActiveCfg = Release|x86
120+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}.Release|x86.ActiveCfg = Release|x86
121+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC}.Release|x86.Build.0 = Release|x86
114122
EndGlobalSection
115123
GlobalSection(SolutionProperties) = preSolution
116124
HideSolutionNode = FALSE
@@ -128,5 +136,6 @@ Global
128136
{58B97FDC-8D6B-48A6-A1D0-2EC686254CC5} = {B3C3F0E2-50B6-450B-A161-F4500F4E681D}
129137
{3A2CEFD2-07E1-41C1-B52F-F1801D277E32} = {B3C3F0E2-50B6-450B-A161-F4500F4E681D}
130138
{FF8A73BD-7DCB-46C1-8F83-EE84D65320B4} = {B9EDC98E-1E00-4320-A39F-7D64F44A2D3C}
139+
{92346BF9-D8E8-4D1E-A3B6-48EA49BD9ADC} = {B9EDC98E-1E00-4320-A39F-7D64F44A2D3C}
131140
EndGlobalSection
132141
EndGlobal

0 commit comments

Comments
 (0)