您的位置:首页 > 产品设计 > UI/UE

设计模式(DesignPattern)之创建者模式(Builder)

2018-03-25 16:44 363 查看

1、定义

        Bulder模式属于创建型模式,封装一个复杂对象的创建过程,并允许按步骤

2、使用场景

        创建复杂的对象,如需要创建的对象有很多参数。

3、UML类图

                                    


4、代码实现

public class Computer {

/**
* Computer的品牌
*/
private String brand;

/**
* Computer的操作系统
*/
private String os;

public String getBrand() {
return brand;
}

public void setBrand(String brand) {
this.brand = brand;
}

public String getOs() {
return os;
}

public void setOs(String os) {
this.os = os;
}

public class Builder {

private Computer computer;

public Builder() {
computer = new Computer();
}

public Builder setBrand(String name) {
computer.setBrand(name);
return this;
}

public Builder setOs(String os) {
computer.setOs(os);
return this;
}

public Computer build() {
return computer;
}
}

} 
/**
* Builder模式Kotlin实现
*/
class ComputerKotlin private constructor(builder: Builder) {

companion object {
fun build(init: Builder.() -> Unit) = Builder(init).build()
}

var brand: String?
var os: String?

init {
brand = builder.brand
os = builder.os
}

class Builder(init: Builder.() -> Unit) {

var brand: String? = null
var os: String? = null

init {
init()
}

fun setBrand(init: Builder.() -> String) = apply { brand = init() }

fun setOs(init: Builder.() -> String) = apply { os = init() }

fun build() = ComputerKotlin(this)

}

}
class Test{

var computer = ComputerKotlin.build{
it.setBrand("Lenove")
it.setOs("MAC")
}

}
        在通常情况下,不同的复杂对象的创建都会有特有的定制,所以一般省略掉Director和抽象的Builder类,采用类部类的方式在实现创建者。

5、总结

        优点:良好的封装性,使用builder构建对象是不必知道其内部的细节。

代码:https://gitee.com/os2chen/DesignPattern
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DesignPattern Android