理解工厂方法模式


understanding Factory method pattern

我正在阅读工厂方法模式,因为我有一些与之相关的问题,但我无法从核心理解它。根据此处的定义

创建对象通常需要复杂的过程,而不是适合包含在组成对象中。对象的创建可能会导致严重的代码重复,可能需要组成对象无法访问的信息可能无法提供足够的抽象级别,或者可能不是构成对象的关注点。

我可以理解重要代码重复的概念,但我无法理解中的其他概念

它可能需要组成对象无法访问的信息

类如何包含组成对象无法访问的信息。据我所知,它可能是该类的任何private数据成员。但若有什么东西是private,那个么对象创建过程是如何需要那个些信息的呢?类似地,其他两点

它可能没有提供足够的抽象级别,或者可能不是组成对象关注的一部分。

请任何人在这里准确地描述这些,并展示我的一些代码,这样我就可以理解

的概念了吗

工厂模式的理念是创建负载类并动态创建新对象。通常它是作为一个静态类来完成的(比如在这里,在官方的PHP文档中),但有些框架使用工厂模式作为在MVC对象中加载对象的一种方式,例如,当您想通过模型加载视图中的一些数据时。

工厂模式的理念是效率和资源管理。它只在尚未加载文件时加载文件,并返回新创建的对象。

(注意,PHP文档中的示例并不理想,最好检查类是否已定义,如果未定义,则尝试包含该文件,而不是使用includeonce())

当在我们的对象中使用外部资源时,会想到创建它的替代方案:

  1. 使用对象的构造函数创建对象
  2. 要求另一个对象为我们的对象创建它(Factory和工厂方法模式)。这样我们的对象就不知道如何创建外部资源,但它应该知道向谁请求它。(它需要保存对工厂的引用或知道调用静态工厂方法时的工厂)
  3. 使用IoC(控制反转)注入外部资源容器这样我们的对象就不会对两者一无所知如何创建外部资源,谁负责创造实际上,这种方法正在使工厂模式过时

假设您正在编写一个API,用户可以通过该API创建和使用某个对象。在内部,在API框架中,您希望在一些服务、侦听器、数据库中注册对象。。。

这里有两种不同的处理方式:

  • 您可以让用户创建对象,并负责将其注册到应该公开(公开)的服务、侦听器和数据库中

  • 您希望提供一个公共工厂类,该类将在给定某些参数的情况下创建对象,并负责为您进行所有必要的初始化

第二种情况是隐藏在系统中创建此类对象的所有复杂性的最佳方法。这还有一个很大的好处,即隐藏注册创建的对象所需的服务、侦听器和数据库。

相关文章: