视频字幕
工厂模式是面向对象设计中的一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式的核心思想是将对象的创建过程封装起来,使得客户端代码无需知道具体创建的是哪个类的对象,从而实现代码的解耦和提高系统的灵活性。工厂模式主要分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。在工厂模式中,客户端通过工厂请求创建对象,工厂负责创建具体的产品对象,然后将产品返回给客户端使用。
简单工厂模式是工厂模式的最基本形式,由一个工厂类负责创建所有产品类的实例。在简单工厂模式中,有一个专门的工厂类,它通常提供一个静态方法,根据传入的参数决定创建并返回哪种具体产品对象。简单工厂模式的特点是:一个工厂类负责创建所有产品;通常使用静态方法创建产品;根据参数决定创建哪种产品;简单易用,但不易扩展。在代码示例中,SimpleFactory类通过create_product方法根据传入的类型参数'A'或'B'来创建不同的具体产品。客户端只需要知道产品的类型名称,而不需要了解具体产品类的创建细节。
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让一个类的实例化延迟到其子类。在工厂方法模式中,我们定义了一个创建者抽象类,它声明了工厂方法,该方法返回一个产品对象。具体创建者类继承这个抽象类,并重写工厂方法以返回一个具体产品实例。工厂方法模式的特点是:定义工厂接口,由子类实现;每个具体产品对应一个具体工厂;符合开闭原则,易于扩展;增加新产品只需添加新的产品类和工厂类。在代码示例中,Creator是抽象工厂类,定义了factory_method接口;ConcreteCreatorA和ConcreteCreatorB是具体工厂类,分别创建ConcreteProductA和ConcreteProductB产品。
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它与工厂方法模式的主要区别在于,抽象工厂模式关注的是创建一系列相关的产品族,而不是单一产品。抽象工厂模式的特点是:创建一系列相关的产品族;一个工厂可以创建多种类型的产品;客户端与产品的具体实现完全分离;易于交换产品族,但难以增加新产品。在代码示例中,我们有两个产品族:Windows和Mac,每个产品族包含按钮和复选框两种产品。GUIFactory是抽象工厂接口,定义了创建按钮和复选框的方法;WindowsFactory和MacFactory是具体工厂,分别创建Windows风格和Mac风格的UI组件。客户端代码只需要知道使用哪个工厂,就可以获得一整套风格一致的UI组件,而不需要关心具体实现细节。
让我们比较三种工厂模式并了解它们的应用场景。简单工厂模式由一个工厂类创建所有产品,简单易用但不易扩展,违反了开闭原则。工厂方法模式定义接口由子类实现,一个工厂创建一种产品,符合开闭原则且易于扩展。抽象工厂模式创建产品族,一个工厂可以创建多种相关产品,易于切换产品族但难以增加新产品。在选择工厂模式时,可以遵循以下指南:如果只需要创建对象且不需要扩展性,可以使用简单工厂;如果需要创建对象且需要扩展性,可以使用工厂方法;如果需要创建多种相关产品,应该使用抽象工厂。工厂模式在实际开发中有广泛应用,例如Spring框架的BeanFactory、不同平台的GUI组件开发、JDBC的DriverManager以及Log4j的LoggerFactory等。