0

简短摘要:当您想要预定义类的某些实例化时,创建子类还是创建工厂更好?

问题背景

我有一个视图助手类 MyWebserviceUrl ,它有一堆属性。它的目的是生成一个url。

我希望能够拥有这个类的预配置实例,这样我就不必为同一个家族做这么多setThis()如果setThat()MyWebserviceUrl有一个类型的 url a,我想得到一个带有一些的实例与此类型有关的默认值a

我可以MyWebserviceUrl像这样通过子类解决这个问题

UrlFamFoo extends MyWebserviceUrl  {…}
UrlFamBar extends MyWebserviceUrl  {…}

我还可以创建一个工厂,给定一个像“Foo”这样的参数可以MyWebserviceUrl为我配置一个对象。

我的问题:

  1. 我应该走子类路线还是工厂路线?
  2. 如果您建议工厂,这应该是
    • 单独的视图助手,
    • 普通工厂类,或
    • factory($name)中的方法MyWebserviceUrl

旁注:我目前正在 Zend Framework 中开发,但我认为这个问题更笼统。


edit1 →<em>更具体地说:我只需要将一些属性设置为默认值,而其余的则需要即时设置。

4

2 回答 2

2

使用原型模式?一旦你按照你想要的方式创建了它,下次你需要同样的东西时创建一个副本。如果您希望每个属性保持不变,这很有用。

如果您只需要将一些属性设置为默认值,而将其余属性设置为动态,我会使用工厂方法而不是子类化。如果您确实需要子类,则可能需要一个工厂类。

于 2009-11-21T20:06:59.213 回答
2

对我来说,子类化看起来不是正确的解决方案。想一想:在您的示例中, aUrlFamFoo只是 a MyWebserviceUrl,其属性设置为某些值。您可以获取一个MyWebserviceUrl对象并设置其属性,使其表现得像一个UrlFamFoo对象。显然这个子类是不必要的。

我会使用工厂方法,或者只是一个构造函数。

于 2009-11-21T20:42:41.433 回答