【发布时间】:2012-01-25 12:55:11
【问题描述】:
来自 Addison Wesley - 设计模式。
(工厂方法)
框架使用抽象类来定义和维护对象之间的关系。框架通常也负责创建这些对象。
上面引用的作者在这里是什么意思?
框架代表什么,以及它“如何”负责创建这些对象?
【问题讨论】:
标签: oop design-patterns factory-pattern
来自 Addison Wesley - 设计模式。
(工厂方法)
框架使用抽象类来定义和维护对象之间的关系。框架通常也负责创建这些对象。
上面引用的作者在这里是什么意思?
框架代表什么,以及它“如何”负责创建这些对象?
【问题讨论】:
标签: oop design-patterns factory-pattern
在如此笼统的层面上讨论这个问题并非易事。我会努力的。
通常,框架提供一组抽象类,这些类在框架的代码中使用,但它们的绑定仅在运行时解析。
框架调用这些类实例的方法,您负责在代码中实现这些方法。
也就是说,在您的代码中,您将扩展此类类,并“填空”。
您的代码和框架代码之间的粘合剂是由此类抽象类(或接口,fwiw)定义的契约:框架知道给定方法接受类型为 K 的参数,并返回类型为 T,因此可以安全地调用它,假设它的语义将被实现者尊重。
另一方面,当您实现该方法时,您隐式接受附加到它的合同并在尊重与其相关联的语义的情况下实施它。
希望它足够清楚。
【讨论】:
OOP 世界中的软件框架是一组提供基本功能的类,程序员可以使用这些基本功能并对其进行扩展以创建应用程序。让我们举一个用于开发汽车的框架的简单示例。它可能有一个称为汽车的抽象类,它没有实现完整的汽车,但可能提供前进、停止和倒车的基本方法。轮子可能还有另一组类。汽车类有轮子(包含关系),这种关系可以在抽象汽车类中定义。因此,框架“维护对象之间的关系”。
但要使用抽象汽车类,您需要创建一个具体类,例如福特皮卡车或法拉利跑车。在这里,您可以使用工厂设计模式来创建这些类型车辆的具体实例。工厂类创建不同类型汽车的特定实例供框架使用。但在很多情况下,框架并不关心是福特还是法拉利,它只是想调用前进、停止和倒车的方法。它们是如何实际实施的(例如,法拉利可以比福特更快地加速)与框架无关。使用工厂类封装了框架中的这些细节。当它说“一个框架通常也负责创建这些对象”时,它指的是框架可以为汽车提供一个基本工厂,可以扩展它以添加您自己的汽车具体实现。
【讨论】: