假设我有一个 AnimalFactory
类,它生成 Dog、Cat
和 Fish
。
使用 AnimalFactory
使事情变得非常简单,一切都很好。
我的问题是,是否有规则或良好实践建议我们隐藏 Dog、Cat 和 Fish 以免直接使用?我的意思是 Dog myDog = new Dog();
将在代码中被禁止。
如果有,我们如何正确隐藏它们?
最佳答案
这完全取决于消费者是否需要关心狗或猫,或者他们是否可以只关心一些动物?
也就是说,如果 Animal.Speak() 没问题,那么只需公开动物并将实现细节留给消费者未知即可。但是,如果有特定于 Dog 的东西,例如 Dog.BarkAtMoon(),那么您必须深入了解它的使用方式。
此外,您可能希望依赖接口(interface),例如 IAnimal。然后你有类 Dog : IAnimal,并且你的工厂返回 IAnimals。通过这种方式,消费者对实现的了解更少,而只知道接口(interface)。
也许你会有
class AnimalFactory
{
IAnimal GetAnimal(AnimalTypeEnum type) { ... return IAnimal type requested ... }
Dog GetDog(string name) { ... just give me a dog named "name" (or IDog) ... }
}
关于java - 如果我们使用工厂模式,我们是否应该向用户隐藏产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374167/