[Kotlin设计模式笔记] 构建器模式Builder
简介
构造器和构建者模式
严格意义上的构建者模式(GOF书中的)是分为产品、抽象建造者、具体建造者、指挥者四个元素的。但小型应用的时候不会这么麻烦,所以本文的"构建者模式"大体上是指"在成员私有的情况下让用户自由组装对象"
形象理解构建者模式
构建者模式的实现方法多种多样,但都有一个目的:让使用者可以自由组建对象。以买手抓饼类比的话,工厂模式就是只有"鸡柳+土豆","生菜+土豆"这两种套餐可选,而构建者模式是可以在"土豆,生菜,鸡柳,火腿"都可以加,选择权交给使用者自由组合
Kotlin构建者模式
Kotlin是不怎么需要构建者模式的。一个优秀的(应用型)编程语言往往会自然而然地写出健壮的代码。可以用Kotlin的几个语法特性轻松的实现
"不"实现
Kotlin可以直接通过变量名自由构建对象,这也是某些文章中的"Kotlin无需构建者模式"的理有
class Product(private var prop0: String = "", private var prop1: String = "")
val p = Product(
prop0 = "OK",
prop1 = "Hello"
)
匿名成员函数实现
class Product(private var prop0: String = "", private var prop1: String = "") {
companion object {
inline fun buildProduct(builder: Product.()->Unit) :Product {
val r = Product()
r.builder()
return r
}
}
}
Kotlin的"Function literals with receiver"语法可以将"语境"给予函数,从而轻松达到构建者模式的功能,我们只需在伴随对象中创建一个构建函数,它接收具有Product的"语境"的构造器builder即可实现
apply函数实现
另外,Kotlin内置了apply函数,完成了上述功能,所以甚至可以直接不写任何代码,使用的时候直接调用即可
class Product(private var prop0: String = "", private var prop1: String = "")
var p = Product().apply {
prop0 = "Hello"
prop1 = "Ok"
}
设计模式本身就是一种最佳实践准则,是从实践经验中总结出来的常用技巧。Kotlin作为一门新的工程语言,总结了设计模式中的经验,让人能更易写出符合最佳实践的代码。
经典构建者模式: C++
待补充
在C++中,常使用一个叫做方法链的技巧来实现构建者模式
#include
using namespace std;
class Product {
private:
int prop0;
string prop1;
public:
Product() {
cout << "product created" << endl;
}
Product& setProp0(int value)
{
prop0 = value;
return *this;
}
Product& setProp1(string value)
{
prop1 = value;
return *this;
}
friend ostream& operator<<(ostream& out, Product& self)
{
out << self.prop0 << "," << self.prop1;
return out;
}
};
int main() {
Product p = Product()
.setProp0(5)
.setProp1("Ok");
cout << p << endl;
return 0;
}