继续工厂模式中的枪械厂的例子。
建造者模式满足的需求场景是:生产一把枪,比如生产一把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; }

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;

  1. Gun* pAK47 = director.生产一把AK47(&builder);
  2. return 0;

} ``` 网上还有些文章说,建造者和抽象工厂区别的,这还是一个问题吗?