建造者模式就是要讲一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。主要用于创建一些复杂的对象,这些对象内部构建见得建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。语出自《大话设计模式》
在大话设计模式里举得例子是构建小人,用户不需要知道建造的具体过程,因为建造者隐藏了小人的组装方式,即头、身子、手脚等部件,用户只要指定构造怎样的小人就可以了。建造的代码与表示的代码是分离的。
在古剑中,建造者模式可以用来构建不同种类的NPC,NPC的差距主要在于人物模型与皮肤贴图,具体的人物动作假定在人物模型中实现。不同的人物模型也许差别很大,但是人物模型的构建顺序应该是稳定的,对外不会关注一个人物模型是如何构造的,只要一个符合场景,满足需要的NPC即可,所以用建造者模型比较恰当。
具体实现如下(各种输出只是测试代码,请自动无视):
product1.h文件
product2.h 文件
builder.h 文件
concreteBuilder1.h 文件
concreteBuilder1.cpp 文件
concreteBuilder2.h 文件
concreteBuilder2.cpp 文件
director.h 文件
director.cpp 文件
main.cpp 文件
运行结果
说明,Builder是建造产品的抽象类,也可以说是接口,关键看怎么定义。ConcreteBuilder是具体的建造者,实现构造的过程。Product是具体的产品。Director是指挥者,用来构建一个使用Builder的对象。其实我还是觉得这玩意形容起来真艰难,看着代码就明白了。