gpt4 book ai didi

c++ - pimpl 习语和构建器模式之间的重叠?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:13 26 4
gpt4 key购买 nike

我正在从 http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Creational_Patterns 中阅读有关构建器模式的信息链接和下面的代码似乎使用类似于 pimpl idiom 的想法,方法是将 Cook 类中的 pizzaBuilder 指针作为私有(private)成员。皮条客习语与其在设计器模式中的使用方式之间是否存在任何重叠?

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

最佳答案

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

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

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

此外,PIMPL 习惯用法是特定于 C++ 的(添加或删除私有(private)成员会导致在任何地方重新编译,因为定义是复制粘贴的),而设计模式力求与语言无关。

关于c++ - pimpl 习语和构建器模式之间的重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com