继续工厂模式中的枪械厂的例子。
建造者模式满足的需求场景是:生产一把枪,比如生产一把AK47,可以分为以下过程:
- 生产配件
- 生产AK47枪管
- 生产AK47枪托
- 生产AK47扳机
- 生产AK47弹夹
- ……,还有很多,这里就列举几个来做代表。
- 组装配件
- 把这些配件组装成一把AK47
UML
点击查看【processon】代码设计
```cpp struct GunBuilder { virtual void 生产枪管() = 0; virtual void 生产枪托() = 0; virtual void 生产扳机() = 0; virtual void 生产弹夹() = 0; virtual Gun* 组装配件() = 0; }
- 把这些配件组装成一把AK47
struct AK47Builder : GunBuilder{ public: AK47Builder(){ m_pProduct = new AK47(); //一把AK47的空壳子 } void 生产枪管(){ } void 生产枪托(){ } void 生产扳机(){ } void 生产弹夹(){ } void 组装配件(){ //组件配件…… return m_pAK47; //这才是一把可以出厂的AK47 } private: Gun *m_pAK47; }
struct Director{ //传const GunBuilder类型,是为了实现多态,即 //相同的生产过程,我们可以生产出AK47、M4A1等。 Product 生产一把AK47(const GunBuilder* pBuilder){ //Director指挥pBuilder生产一把枪。也可不需要这个Director,pBuilder自己知道生产过程 pBuilder->生产枪管(); pBuilder->生产枪托(); pBuilder->生产扳机(); pBuilder->生产弹夹(); return pBuilder->组装配件(); } }
int main(){ AK47Builder builder; Director director;
Gun* pAK47 = director.生产一把AK47(&builder);
return 0;
} ``` 网上还有些文章说,建造者和抽象工厂区别的,这还是一个问题吗?