Oop 不';违反工厂模式,违反;告诉我,唐';“不要问”;原则?

Oop 不';违反工厂模式,违反;告诉我,唐';“不要问”;原则?,oop,design-patterns,factory,design-principles,tell-dont-ask,Oop,Design Patterns,Factory,Design Principles,Tell Dont Ask,程序代码获取信息,然后做出决策。面向对象的代码告诉对象做事情 亚历克夏普 当我们使用时,我们根据除factory类之外的类的属性做出决策,因此这不会违反?不,我们不会违反 当我们告诉工厂类创建一个对象实例时,所有的责任都在工厂类内。调用方对具体类没有影响 工厂类本身也没有违反这一规则。它正在做它必须做的事情:根据给定的规则(让它硬编码或外部设置,或者更复杂的东西)决定生成什么类型的对象。但是,逻辑的每一部分都在factory方法内部。但是,例如,factory类正在根据示例中的产品状态进行决策。

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

亚历克夏普

当我们使用时,我们根据除factory类之外的类的属性做出决策,因此这不会违反

不,我们不会违反

当我们告诉工厂类创建一个对象实例时,所有的责任都在工厂类内。调用方对具体类没有影响


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

但是,例如,factory类正在根据示例中的产品状态进行决策。(询问产品,然后做出决定)你的意思是基于产品ID?这不是问题,因为只有Factory类可以知道所有可能的类,并且它具有决定使用哪个类的逻辑。您不能将此职责委托给任何其他类。