设计模式学习篇-建造者模式

60 阅读1分钟

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();