工厂方法图案固体

时间:2017-10-01 12:03:15

标签: design-patterns interface solid-principles factory-method

工厂方法是否仅遵循SOLID中的依赖性反转原则和接口隔离原则?我发现在另一个网站上却无法找到任何论据,为什么它实现了接口隔离原则。它遵循DIP,因为它依赖于接口(抽象)而不是具体的类。

2 个答案:

答案 0 :(得分:1)

首先,工厂方法是一种独立的设计模式,用于在不将实例化逻辑暴露给客户端的情况下创建对象。工厂方法不遵循任何原则,但它意味着将对象创建的责任分离到不同的类来处理创建对象的问题,而不必指定将要创建的对象的确切类。因为它是一种创造模式,所以它的责任就是创造对象。它与接口隔离原理无关。接口隔离原则主要集中在不创建胖接口,而是使其精简和逻辑分组,使得不应该强迫客户端实现它不需要的方法。

请不要对SOLID原则和设计模式感到困惑。 SOLID原则只是实现干净代码的一套原则。很少有设计模式有助于实现SOLID原则。例如,您将对象创建的责任转移到工厂,然后工厂的全部责任将是对象创建(单一责任原则)等等。

答案 1 :(得分:0)

您无法确认工厂方法模式将遵循接口隔离原则本身,而不使用其余接口。这个原则本质上意味着一个类很可能会使用另一个类的整个接口,所以如果它们只提供一个或两个方法来构造客户端使用的实例,那么工厂可能会遵循这个原则(这与在这种情况下的单一责任原则)。但是,这并不意味着客户将遵循该原则。

至于依赖性倒置原则,如果你比较有和没有这种模式的设计,很容易识别。如果没有FM模式,您的客户端必须决定实例化和使用可构造对象的哪个子类型。因此,这些将是依赖项(由括号分隔的单独组件;箭头方向意味着“依赖于”):

(Client) -+-> (ConstructableA)
          \-> (ConstructableB)

应用Factory Method设计模式时,组件之间的依赖关系为:

(Client -> IConstructable) <-+- (ConstructableA)
                             \- (ConstructableB)

因此,有效地,组件之间的依赖关系现在已被反转。在前一种情况下,只要可构造组件发生更改,客户端组件就必须(可能)更改。在后面,客户端组件可以在其他地方重用,而且只要IConstructable可以更改Constructable *组件。