3 回答
TA贡献2065条经验 获得超14个赞
看来,OP的(优秀)问题列表已被忽略。当前的答案仅提供了经过重新定义的定义。因此,我将尝试简洁地解决原始问题。
如果抽象工厂只有一个创建者和一个产品,那么它仍然是抽象工厂模式吗?(用于创建家族的界面)
没有。抽象工厂必须创建多个产品才能制作“相关产品系列”。规范的GoF示例创建ScrollBar()和Window()。优点(和目的)是,抽象工厂可以在其多个产品中强制使用一个公共主题。
可以从接口创建Factory Method具体创建器,还是必须从类创建它?(类将实例化延迟到子类)
首先,我们必须注意,GoF编写本书时既没有Java也没有C#。术语接口的GoF使用与特定语言引入的接口类型无关。因此,可以从任何API创建具体的创建者。模式中的重点是API使用了自己的Factory方法,因此只有一个方法的接口不能是Factory方法,而只能是Abstract Factory。
如果抽象工厂只能有一个创建者和一个产品,那么抽象工厂和 工厂方法之间的唯一区别是前者的创建者是一个接口,后者的创建者是一个类吗?
按照上述答案,该问题不再有效;但是,如果您认为抽象工厂和工厂方法之间的唯一区别是创建的产品数量,请考虑客户如何使用这些模式中的每一个。通常将抽象工厂注入其客户端,并通过组合/委托进行调用。工厂方法必须被继承。因此,一切都回到了旧的组合与继承之争。
但是这些答案提出了第四个问题!
由于只有一个方法的接口不能是工厂方法,而只能是抽象工厂,所以我们怎么称呼只有一个方法的创建接口?
如果该方法是静态的,则通常称为“ 静态工厂”。如果该方法是非静态的,则通常称为简单工厂。这些都不是GoF模式,但是在实践中它们更常用!
- 3 回答
- 0 关注
- 698 浏览
添加回答
举报