pimpl习语和建造者模式之间的重叠?

时间:2013-06-14 00:37:07

标签: c++ builder pimpl-idiom

我正在阅读来自http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Creational_Patterns链接的构建器模式,下面的代码似乎使用类似于pimpl习语的想法,通过在Class Cook中指向pizzaBuilder作为私有成员。皮条客成语与设计师模式中的用法有何重叠?

class Cook
{
        public:
                void setPizzaBuilder(PizzaBuilder* pb)
                {
                        m_pizzaBuilder = pb;
                }
                Pizza* getPizza()
                {
                        return m_pizzaBuilder->getPizza();
                }
                void constructPizza()
                {
                        m_pizzaBuilder->createNewPizzaProduct();
                        m_pizzaBuilder->buildDough();
                        m_pizzaBuilder->buildSauce();
                        m_pizzaBuilder->buildTopping();
                }
        private:
                PizzaBuilder* m_pizzaBuilder;
};

1 个答案:

答案 0 :(得分:2)

没有。虽然使用的语言功能(指针,私有字段)可能相似,但预期结果却完全不同。

PIMPL对类的用户相当透明 - 这就是重点。您没有在CookPimpl的界面中看到Cook - 它隐藏在.cpp文件中,调用者甚至无法对其执行任何有意义的操作。

另一方面,Builder类是自给自足的,可以在Cook类或PizzaRestaurant中直接使用。

更重要的是,PIMPL习语是特定于C ++的(添加或删除私有成员会导致重新编译到处,因为定义是复制粘贴的),而设计模式则努力与语言无关。