【问题标题】:Doesn't the Factory pattern, violate the "Tell, Don't Ask" principle?工厂模式不是违反“告诉,不问”的原则吗?
【发布时间】:2013-07-26 09:33:17
【问题描述】:

程序代码获取信息然后做出决定。面向对象的代码告诉对象做事。

亚历克夏普

当我们使用Factory pattern时,我们会根据除工厂类之外的类的属性做出决定,所以这并不违反Tell, Don't Ask principle

【问题讨论】:

    标签: oop design-patterns factory design-principles tell-dont-ask


    【解决方案1】:

    不,我们不违反。

    当我们告诉 Factory 类创建一个对象实例时,所有的责任都在 Factory 类中。调用者不会影响具体的类。

    Factory 类本身也没有违反该规则。它正在做它必须做的事情:根据给定的规则(让它被硬编码或外部设置,或者更复杂的东西)决定生成什么样的对象。但每一点逻辑都在工厂方法内部。

    【讨论】:

    • 但是,例如,工厂类正在根据 oodesign.com/factory-pattern.html 示例中的产品状态做出决定。 (询问产品,然后做出决定)
    • 你的意思是基于产品ID?这不是问题,因为只有 Factory 类可以知道所有可能的类,并且它具有决定使用哪个类的逻辑。您不能将此责任委托给任何其他类。
    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2020-07-24
    • 2011-01-23
    • 1970-01-01
    • 2012-05-09
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多