-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBuilder.kt
121 lines (94 loc) · 2.5 KB
/
Builder.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package design_patterns
/**
* pattern: Builder
*
* using: used to create complex objects
*
* description: to create an object, an auxiliary class Builder is used, which has methods for changing the fields of our main class.
*/
/**
*
* The first variant
*
*/
class Pony1 {
private val name: String
private val family: String
private val cutieMark: String
private val city: String
private constructor(name: String, family: String, cutieMark: String, city: String) {
this.name = name
this.family = family
this.cutieMark = cutieMark
this.city = city
}
override fun toString(): String {
return "$name, $family, $cutieMark, $city"
}
class Builder {
private var name: String = ""
private var family: String = ""
private var cutieMark: String = ""
private var city: String = ""
fun changeName(name: String) = apply {
this.name = name
}
fun changeFamily(family: String) = apply {
this.family = family
}
fun changeCutieMark(cutieMark: String) = apply {
this.cutieMark = cutieMark
}
fun changeCity(city: String) = apply {
this.city = city
}
fun build() = Pony1(name, family, cutieMark, city)
}
}
/**
*
* The second variant
*
*/
class Pony2 {
private var name: String = ""
private var family: String = ""
private var cutieMark: String = ""
private var city: String = ""
override fun toString(): String {
return "$name, $family, $cutieMark, $city"
}
companion object {
fun newBuilder() = Pony2().Builder()
}
inner class Builder {
fun changeName(name: String) = apply {
[email protected] = name
}
fun changeFamily(family: String) = apply {
[email protected] = family
}
fun changeCutieMark(cutieMark: String) = apply {
[email protected] = cutieMark
}
fun changeCity(city: String) = apply {
[email protected] = city
}
fun build() = this@Pony2
}
}
/**
*
* Kotlin variant with default arguments
*
*/
class Pony3(
private var name: String = "",
private var family: String = "",
private var cutieMark: String = "",
private var city: String = ""
) {
override fun toString(): String {
return "$name, $family, $cutieMark, $city"
}
}