DogFactory类的意义是什么?它所做的只是实现静态功能来创建特定类型的狗,但为什么不自己写它呢?
例如,代替
Dog* ptr = DogFactory::createYellowDog();
为什么不
Dog* ptr = new YellowDog();
它更清晰,更短,更容易。
当然在实践中,您会做类似的事情
std::unique_ptr<Dog> ptr = std::make_unique(YellowDog());
但是无论哪种方式,仍然比使用DogFactory更好。
答案 0 :(得分:1)
典型的情况是Dog
是公共图书馆接口的一部分,而YellowDog
是图书馆提供的私有实现的一部分。用户代码不知道库选择的特定实现,仅使用公共接口Dog
和公共工厂函数来产生实例。库中YellowDog
的这种实现方式可以修改,而无需更改用户代码。