File tree Expand file tree Collapse file tree 11 files changed +176
-11
lines changed
Expand file tree Collapse file tree 11 files changed +176
-11
lines changed Original file line number Diff line number Diff line change 1+ namespace CreationalPatterns . Builder ;
2+
3+ public class AmericanPizzaBuilder : PizzaBuilder
4+ {
5+ public override void BuildDough ( )
6+ {
7+ Pizza . Dough = "pan baked" ;
8+ }
9+
10+ public override void BuildSauce ( )
11+ {
12+ Pizza . Sauce = "hot spicy" ;
13+ }
14+
15+ public override void BuildTopping ( string topping = "" )
16+ {
17+ Pizza . Topping = topping ;
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ namespace CreationalPatterns . Builder ;
2+
3+ public class ItalianPizzaBuilder : PizzaBuilder
4+ {
5+ public override void BuildDough ( )
6+ {
7+ Pizza . Dough = "crispy thin" ;
8+ }
9+
10+ public override void BuildSauce ( )
11+ {
12+ Pizza . Sauce = "mild" ;
13+ }
14+
15+ public override void BuildTopping ( string topping = "" )
16+ {
17+ Pizza . Topping = topping ;
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ namespace CreationalPatterns . Builder ;
2+
3+ public class Pizza
4+ {
5+ public string Dough { get ; set ; }
6+
7+ public string Sauce { get ; set ; }
8+
9+ public string Topping { get ; set ; }
10+
11+ public override string ToString ( )
12+ {
13+ return $ "{ Dough } +{ Sauce } +{ Topping } ";
14+ }
15+ }
Original file line number Diff line number Diff line change 1+ namespace CreationalPatterns . Builder ;
2+
3+ public abstract class PizzaBuilder
4+ {
5+ protected readonly Pizza Pizza ;
6+
7+ public PizzaBuilder ( )
8+ {
9+ Pizza = new Pizza ( ) ;
10+ }
11+
12+ public abstract void BuildDough ( ) ;
13+ public abstract void BuildSauce ( ) ;
14+ public abstract void BuildTopping ( string topping = "" ) ;
15+
16+ public Pizza Build ( )
17+ {
18+ return Pizza ;
19+ }
20+ }
Original file line number Diff line number Diff line change @@ -19,7 +19,7 @@ Creating and assembling the parts of a complex object within a class is inflexib
1919
2020A class can delegate to different ` Builder ` objects to create different representations of a complex object.
2121
22- ![ Real world example] ( https://sourcemaking.com/files/v2/content/patterns/Builder_example1.svg )
22+ ![ Real world example] ( https://sourcemaking.com/files/v2/content/patterns/Builder_example1.png )
2323
2424* Source* : SourceMaking.com
2525
@@ -67,10 +67,21 @@ A class can delegate to different `Builder` objects to create different represen
6767
6868## Example
6969
70- ** Definition **
70+ ![ PizzaBuilder ] ( /Diagrams/Builder.png )
7171
7272** Usage**
7373
74+ ``` cs
75+ // Create a concrete builder
76+ var americanPizzaBuilder = new AmericanPizzaBuilder ();
77+
78+ // Create a director
79+ var waiter = new Waiter (americanPizzaBuilder );
80+
81+ // Create a pizza
82+ var pizza = waiter .CreatePizza (" Spinach+Olives" );
83+ ```
84+
7485## Comparison with other patterns
7586
7687* Builders can produce products that do not belong to the same class hierarchy or interface. It is a key difference between the ` Builder ` and other creational patterns.
Original file line number Diff line number Diff line change 1+ using System ;
2+
3+ namespace CreationalPatterns . Builder ;
4+
5+ public class TestBuilder
6+ {
7+ public static void run ( )
8+ {
9+ var americanPizzaBuilder = new AmericanPizzaBuilder ( ) ;
10+ var waiter = new Waiter ( americanPizzaBuilder ) ;
11+
12+ var pizza = waiter . CreatePizza ( "Spinach+Olives" ) ;
13+
14+ Console . WriteLine ( "Created Pizza: " + pizza ) ;
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ namespace CreationalPatterns . Builder ;
2+
3+ // Director
4+ public class Waiter
5+ {
6+ private PizzaBuilder _pizzaBuilder ;
7+
8+ public Waiter ( PizzaBuilder pizzaBuilder )
9+ {
10+ _pizzaBuilder = pizzaBuilder ;
11+ }
12+
13+ public Pizza CreatePizza ( string topping )
14+ {
15+ _pizzaBuilder . BuildDough ( ) ;
16+ _pizzaBuilder . BuildSauce ( ) ;
17+ _pizzaBuilder . BuildTopping ( topping ) ;
18+ return _pizzaBuilder . Build ( ) ;
19+ }
20+ }
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ class Program
1111 {
1212 static void Main ( string [ ] args )
1313 {
14- Prototype . TestPrototype . Run ( ) ;
14+ Builder . TestBuilder . run ( ) ;
1515 }
1616 }
1717}
Original file line number Diff line number Diff line change 1+ <?xml version =" 1.0" encoding =" utf-8" ?>
2+ <ClassDiagram MajorVersion =" 1" MinorVersion =" 1" >
3+ <Class Name =" CreationalPatterns.Builder.AmericanPizzaBuilder" >
4+ <Position X =" 9" Y =" 5.25" Width =" 1.5" />
5+ <TypeIdentifier >
6+ <HashCode >AAAAAAAAAgAAAAAAAAAQAAAAAIAAAAAAAAAAAAAAAAA=</HashCode >
7+ <FileName >Builder\AmericanPizzaBuilder.cs</FileName >
8+ </TypeIdentifier >
9+ </Class >
10+ <Class Name =" CreationalPatterns.Builder.ItalianPizzaBuilder" >
11+ <Position X =" 11.25" Y =" 5.25" Width =" 1.5" />
12+ <TypeIdentifier >
13+ <HashCode >AAAAAAAAAgAAAAAAAAAQAAAAAIAAAAAAAAAAAAAAAAA=</HashCode >
14+ <FileName >Builder\ItalianPizzaBuilder.cs</FileName >
15+ </TypeIdentifier >
16+ </Class >
17+ <Class Name =" CreationalPatterns.Builder.Pizza" >
18+ <Position X =" 6.25" Y =" 2.5" Width =" 1.5" />
19+ <TypeIdentifier >
20+ <HashCode >AAgAAEAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAQA=</HashCode >
21+ <FileName >Builder\Pizza.cs</FileName >
22+ </TypeIdentifier >
23+ </Class >
24+ <Class Name =" CreationalPatterns.Builder.PizzaBuilder" >
25+ <Position X =" 10.25" Y =" 1.75" Width =" 1.5" />
26+ <TypeIdentifier >
27+ <HashCode >AAAAAAAAAgAAAAAAAAAQAAAAAIAAgAEAAAAAAAAAAAA=</HashCode >
28+ <FileName >Builder\PizzaBuilder.cs</FileName >
29+ </TypeIdentifier >
30+ <ShowAsAssociation >
31+ <Field Name =" Pizza" />
32+ </ShowAsAssociation >
33+ </Class >
34+ <Class Name =" CreationalPatterns.Builder.Waiter" >
35+ <Position X =" 14.25" Y =" 2.5" Width =" 1.5" />
36+ <TypeIdentifier >
37+ <HashCode >AAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode >
38+ <FileName >Builder\Waiter.cs</FileName >
39+ </TypeIdentifier >
40+ <ShowAsAssociation >
41+ <Field Name =" _pizzaBuilder" />
42+ </ShowAsAssociation >
43+ </Class >
44+ <Font Name =" Segoe UI" Size =" 9" />
45+ </ClassDiagram >
You can’t perform that action at this time.
0 commit comments