Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 为什么避免工厂模式的条件逻辑是好的?_Design Patterns_Factory Pattern - Fatal编程技术网

Design patterns 为什么避免工厂模式的条件逻辑是好的?

Design patterns 为什么避免工厂模式的条件逻辑是好的?,design-patterns,factory-pattern,Design Patterns,Factory Pattern,抽象工厂模式的好处之一是避免工厂模式的条件逻辑。然而,这种方法会产生更多的类、更多的代码、更多的单元测试,并且不会使代码更快,也不会像代码类图或文档那样可读。那么,在这种情况下,工厂模式上没有条件逻辑有什么意义呢 抽象工厂模式的好处不是避免条件逻辑,而是使调用工厂的代码更加抽象 假设代码属于软件体系结构中的一个非常抽象的层(例如,业务领域层)。如果您使用工厂模式,它涉及一个具体的工厂类,该类知道很多细节(例如,数据库的API、第三方框架/库的API),那么您的业务域层将依赖于这些细节。这减少了重

抽象工厂模式的好处之一是避免工厂模式的条件逻辑。然而,这种方法会产生更多的类、更多的代码、更多的单元测试,并且不会使代码更快,也不会像代码类图或文档那样可读。那么,在这种情况下,工厂模式上没有条件逻辑有什么意义呢

抽象工厂模式的好处不是避免条件逻辑,而是使调用工厂的代码更加抽象


假设代码属于软件体系结构中的一个非常抽象的层(例如,业务领域层)。如果您使用工厂模式,它涉及一个具体的
工厂
类,该类知道很多细节(例如,数据库的API、第三方框架/库的API),那么您的业务域层将依赖于这些细节。这减少了重用层的机会,因为每次重用它时,这些细节都必须存在。从体系结构的角度来看,您确实不需要这种依赖关系。

抽象工厂模式的好处不是避免条件逻辑,而是使调用工厂的代码更加抽象

假设代码属于软件体系结构中的一个非常抽象的层(例如,业务领域层)。如果您使用工厂模式,它涉及一个具体的
工厂
类,该类知道很多细节(例如,数据库的API、第三方框架/库的API),那么您的业务域层将依赖于这些细节。这减少了重用层的机会,因为每次重用它时,这些细节都必须存在。从体系结构的角度来看,您确实不需要这种依赖关系。

在OOP中,一般的“目标”是用多态性替换条件逻辑(if-else、switch等)。这通常涉及到创建一个抽象类或接口,并从中创建可能需要的对象范围

好处是可以添加新的派生类,而无需添加新代码。典型的例子是不同的形状类(正方形、圆形、三角形等),它们都是从基本形状类派生的。例如,每个新形状都提供自己的draw()实现

这同样适用于抽象工厂,其目的是为组件或类似组件提供多个“对象集”。规范的(人为的)示例是为应用程序提供一组正确的UI对象,以便在Windows、Mac、X Windows等环境下工作。 其思想是将正确的factory对象传递给应用程序,并允许它创建目标环境所需的一组正确的UI对象

如果没有这种构造,应用程序将需要传递一个类似“Windows”的参数,并使用“可怕的”条件逻辑来确定使用工厂方法创建哪些对象

大多数人都会同意,如果“对象集”的数量很小且固定,那么继续使用条件逻辑和工厂方法。但是,如果这种情况发生变化,那么您将面临代码更改

如果使用抽象工厂添加新的“对象集”,则只需创建抽象工厂的新子类,而不必更改应用程序代码。这在大型系统中更具可读性和可扩展性,受到高度重视

这就是“在工厂模式上没有条件逻辑的意义”,但总是根据您自己的业务需求进行判断。

在面向对象编程中,有一个通用的“目标”是用多态性替换条件逻辑(否则,开关等)。这通常涉及到创建一个抽象类或接口,并从中创建可能需要的对象范围

好处是可以添加新的派生类,而无需添加新代码。典型的例子是不同的形状类(正方形、圆形、三角形等),它们都是从基本形状类派生的。例如,每个新形状都提供自己的draw()实现

这同样适用于抽象工厂,其目的是为组件或类似组件提供多个“对象集”。规范的(人为的)示例是为应用程序提供一组正确的UI对象,以便在Windows、Mac、X Windows等环境下工作。 其思想是将正确的factory对象传递给应用程序,并允许它创建目标环境所需的一组正确的UI对象

如果没有这种构造,应用程序将需要传递一个类似“Windows”的参数,并使用“可怕的”条件逻辑来确定使用工厂方法创建哪些对象

大多数人都会同意,如果“对象集”的数量很小且固定,那么继续使用条件逻辑和工厂方法。但是,如果这种情况发生变化,那么您将面临代码更改

如果使用抽象工厂添加新的“对象集”,则只需创建抽象工厂的新子类,而不必更改应用程序代码。这在大型系统中更具可读性和可扩展性,受到高度重视


这就是“在工厂模式上没有条件逻辑的要点”,但始终根据您自己的业务需求进行判断。

感谢您的回复。我明白。我并不是说抽象工厂模式有什么好处,而是很多书都提到的一件事,我。E避免条件逻辑。我的问题说明了这一点。所以,你们当然知道为什么避免条件逻辑是一种好处,我希望你们能澄清一下。你们能告诉我哪本书吗?正如我的回答所说,我不认为避免条件逻辑有任何好处。但是我确实看到了依赖倒置原则的好处,谢谢你的回答。我明白。我并不是说抽象工厂模式有什么好处,而是很多书都提到的一件事,我。E避免条件逻辑。我的问题状态