2

我正在阅读来自http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Creational_Patterns链接的构建器模式,下面的代码似乎使用类似于 pimpl idiom 的想法,有一个指向 PizzaBuilder 的指针在 Class Cook 中作为私人成员。皮条客惯用语及其在设计师模式中的使用方式之间是否有任何重叠?

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;
};
4

1 回答 1

2

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

PIMPL 对班级的用户相当透明——这就是重点。您看不到CookPimpl在界面中使用过Cook-它隐藏在.cpp文件中,调用者甚至无法对它做任何有意义的事情。

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

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

于 2013-06-14T01:10:37.497 回答