Skip to content

Commit bbc1323

Browse files
committed
builder
1 parent c2e8317 commit bbc1323

File tree

4 files changed

+197
-0
lines changed

4 files changed

+197
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ Full Playlist can be found [here](https://www.youtube.com/playlist?list=PLOeFnOV
55

66
## Table of contents
77
- [Factory, Abstract Factory, Factory Method](https://youtu.be/xN7EFHU_rXA)
8+
- [Builder](https://youtu.be/WfBsYo20D_I)

builder/builder.linq

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<Query Kind="Program">
2+
<Namespace>System.Web</Namespace>
3+
</Query>
4+
5+
void Main()
6+
{
7+
//QueryBuilder builder = new QueryBuilder();
8+
//FormBodyBuilder builder = new FormBodyBuilder();
9+
//HttpHeaderBuilder builder = new HttpHeaderBuilder();
10+
DictBuilder builder = new DictBuilder();
11+
ConstructionProcess(builder);
12+
builder.Build().Dump();
13+
}
14+
15+
public void ConstructionProcess(IKeyValueCollectionBuilder builder)
16+
{
17+
builder.Add("make", "lada")
18+
.Add("colour", "red")
19+
.Add("year", 1980.ToString());
20+
}
21+
22+
public interface IKeyValueCollectionBuilder
23+
{
24+
IKeyValueCollectionBuilder Add(string key, string value);
25+
}
26+
27+
public class QueryBuilder : IKeyValueCollectionBuilder
28+
{
29+
private StringBuilder _queryStringBuilder = new StringBuilder();
30+
31+
public IKeyValueCollectionBuilder Add(string key, string value){
32+
_queryStringBuilder.Append(_queryStringBuilder.Length == 0 ? "?" : "&");
33+
_queryStringBuilder.Append(key);
34+
_queryStringBuilder.Append('=');
35+
_queryStringBuilder.Append(Uri.EscapeDataString(value));
36+
return this;
37+
}
38+
39+
public string Build() {
40+
return _queryStringBuilder.ToString();
41+
}
42+
}
43+
44+
public class FormBodyBuilder : IKeyValueCollectionBuilder
45+
{
46+
private StringBuilder _queryStringBuilder = new StringBuilder();
47+
48+
public IKeyValueCollectionBuilder Add(string key, string value)
49+
{
50+
_queryStringBuilder.Append(key);
51+
_queryStringBuilder.Append('=');
52+
_queryStringBuilder.Append(value);
53+
_queryStringBuilder.AppendLine();
54+
return this;
55+
}
56+
57+
public string Build()
58+
{
59+
return _queryStringBuilder.ToString();
60+
}
61+
}
62+
63+
public class HttpHeaderBuilder : IKeyValueCollectionBuilder
64+
{
65+
private StringBuilder _queryStringBuilder = new StringBuilder();
66+
67+
public IKeyValueCollectionBuilder Add(string key, string value)
68+
{
69+
_queryStringBuilder.Append(key);
70+
_queryStringBuilder.Append(": ");
71+
_queryStringBuilder.Append(value);
72+
_queryStringBuilder.AppendLine();
73+
return this;
74+
}
75+
76+
public string Build()
77+
{
78+
return _queryStringBuilder.ToString();
79+
}
80+
}
81+
82+
public class DictBuilder : IKeyValueCollectionBuilder
83+
{
84+
private Dictionary<string, string> Dictionary = new Dictionary<string, string>();
85+
86+
public IKeyValueCollectionBuilder Add(string key, string value)
87+
{
88+
Dictionary[key] = value;
89+
return this;
90+
}
91+
92+
public Dictionary<string, string> Build()
93+
{
94+
return Dictionary;
95+
}
96+
}

builder/builder_better.linq

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<Query Kind="Program" />
2+
3+
void Main()
4+
{
5+
var builder = new CarBuilder();
6+
BuildRedLada1980(builder);
7+
builder.Build().Dump();
8+
}
9+
10+
public void BuildRedLada1980(ICarBuilder builder)
11+
{
12+
builder
13+
.setMake("lada")
14+
.setColour("red")
15+
.setManifactureDate(DateTime.UtcNow);
16+
}
17+
18+
public class Car
19+
{
20+
public string Make { get; set; }
21+
public string Colour { get; set; }
22+
public string ManifactureDate { get; set; }
23+
}
24+
25+
public interface ICarBuilder
26+
{
27+
public ICarBuilder setMake(string make);
28+
29+
public ICarBuilder setColour(string colour);
30+
31+
public ICarBuilder setManifactureDate(DateTime date);
32+
}
33+
34+
public class CarBuilder : ICarBuilder
35+
{
36+
private Car _car = new Car();
37+
38+
public ICarBuilder setMake(string make)
39+
{
40+
_car.Make = make;
41+
return this;
42+
}
43+
44+
public ICarBuilder setColour(string colour)
45+
{
46+
_car.Colour = colour;
47+
return this;
48+
}
49+
50+
public ICarBuilder setManifactureDate(DateTime date)
51+
{
52+
_car.ManifactureDate = date.ToString("dd/MM/yyyy");
53+
return this;
54+
}
55+
56+
public Car Build() => _car;
57+
}

builder/builder_wrong.linq

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<Query Kind="Program" />
2+
3+
void Main()
4+
{
5+
new CarBuilder()
6+
.setMake("lada")
7+
.setColour("red")
8+
.setManifactureDate("01/01/1980")
9+
.Build()
10+
.Dump();
11+
}
12+
13+
public class Car
14+
{
15+
public string Make { get; set; }
16+
public string Colour { get; set; }
17+
public string ManifactureDate { get; set; }
18+
}
19+
20+
public class CarBuilder
21+
{
22+
private Car _car = new Car();
23+
24+
public CarBuilder setMake(string make)
25+
{
26+
_car.Make = make;
27+
return this;
28+
}
29+
30+
public CarBuilder setColour(string colour)
31+
{
32+
_car.Colour = colour;
33+
return this;
34+
}
35+
36+
public CarBuilder setManifactureDate(string date)
37+
{
38+
_car.ManifactureDate = date;
39+
return this;
40+
}
41+
42+
public Car Build() => _car;
43+
}

0 commit comments

Comments
 (0)