1. 概念
可以简单的理解为:通过建造者类来创建对象,建造者类会会对创建的对象进行校验和设置
2. 为什么要使用建造者模式
创建的对象比较复杂,例如需要很多的参数,或者对某些参数进行校验,使用建造者模式可以把对象的创建进行分离,不必在初始化的时候就进行大量操作。Java语言中大量的使用了这种模式,基本上带有.Builder都在使用此模式
3. 如何实现建造者模式
举个简单的例子,游戏开发者最常用的节点池的实现,根据传入的参数进行创建节点池的初始数量
class NodePool {
private _nodeMap: Array<Object> = null;
constructor(num: number) {
this._nodeMap = new Array<Object>(num);
}
public getNode(): Object {
for (let i = 0; i < this._nodeMap.length; i++) {
if (this._nodeMap[i] != null) {
return this._nodeMap[i];
}
}
return null;
}
}
class NodePoolBuilder {
private static default_num: number = 5; // 默认创建的数量
private static default_max: number = 100; // 默认创建的最大数量
private static default_min: number = 2; // 默认创建的最小数量
private _num: number = NodePoolBuilder.default_num;
public setNum(num: number): NodePoolBuilder {
this._num = num;
return this;
}
public build(): NodePool {
if (this._num > NodePoolBuilder.default_max) {
console.log('创建的数量过大,设置为最大值');
this._num = NodePoolBuilder.default_max;
} else if (this._num < NodePoolBuilder.default_min) {
console.log('创建的数量过小,设置为最小值');
this._num = NodePoolBuilder.default_min;
}
return new NodePool(this._num);
}
}
let pool = new NodePoolBuilder().setNum(30).build();