Builder模式 【Java设计模式】
Builder模式
android
构建者(Builder)模式(又叫生成器设计模式):
当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如VO、PO、Entity...),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。
看例子:
class Person {
private var name: String? = null
private var age: String? = null
private var height: String? = null
private var weight: String? = null
private var sex: String? = null
constructor(person: Person){
this.name=person.name
this.age=person.age
this.height=person.height
this.weight=person.weight
this.sex=person.sex
}
private constructor()
class Builder {
private val person: Person = Person()
fun name(name: String): Builder {
person.name = name
return this
}
fun age(age: String): Builder {
person.age = age
return this
}
fun height(height: String): Builder {
person.height = height
return this
}
fun weight(weight: String): Builder {
person.weight = weight
return this
}
fun sex(sex: String): Builder {
person.sex = sex
return this
}
fun build(): Person {
return Person(person)
}
}
override fun toString(): String {
return "Person(name=$name, age=$age, height=$height, weight=$weight, sex=$sex)"
}
}
调用以及运行结果:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val build = Person.Builder()
.age("16")
.height("199")
.name("ODP")
.weight("180")
.sex("男")
.build()
Log.e("odp", "p1:$build")
}
}
![]()
注意:
我们的Person类里面的无参数构造器是被private修饰,也就是说让用户调用的时候只能通过我们想要的方式(Builder去点每一个属性)去调用。