`

工厂方法模式Factory Method延迟到子类来选择实现

阅读更多
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。

工厂方法模式的解决思路就是不解决,采用无为而治的方式。
public class ExportA implements ExportApi {
  public boolean export(String data) {
       System.out.println("ExportA" + data);
    return true;
  }
}

public class ExportB implements ExportApi {
  public boolean export(String data) {
       System.out.println("ExportB" + data);
    return true;
  }
}

public abstract class ExportOperation {
  protected abstract ExprotApi factoryMethod();
 
  public boolean export(String data) {
    ExportApi api = factoryMethod();
    return api.export(data);
  }
}

public class ExportOperateA extends ExportOperation {
  protected ExprotApi factoryMethod() {
    return new ExportA();
  }
}

public class ExportOperateB extends ExportOperation {
  protected ExprotApi factoryMethod() {
    return new ExportB();
  }
}

在客户端可以用下面代码:
ExportOperation operate = new ExportOperateB();
operate.export("data");

工厂方法模式与IoC/DI
参与者:三个参与者,一个是某个对象,一个是IoC/DI的容器,还有一个是某个对象的外部资源。
谁依赖谁:某个对象依赖于IoC/DI容器
为什么需要依赖:对象需要IoC/DI容器来提供对象需要的外部资源。
谁注入谁:IoC/DI容器注入某个对象
到底注入什么:注入某个对象需要的外部资源
谁控制谁:IoC/DI容器来控制对象。
控制什么:控制对象实例的创建。

依赖注入是从应用程序的角度描述:应用程序依赖容器创建并注入它所需要的外部资源
控制反转是从容器的角度去描述:容器控制应用程序,由容器反向地向应用程序注入其所需要的资源。

参数化工厂方法:通过给工厂方法传递参数,让工厂方法根据参数的不同来创建不同的产品对象。只要ExportOperate类继承ExportOperation ,根据参数实例化ExportApi 。

工厂方法模式很好地体现了“依赖倒置”原则。依赖倒置原则告诉我们要依赖抽象,不用依赖于具体类。
分享到:
评论

相关推荐

    工厂方法模式(FactoryMethod)

    在工厂方法模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到了子类中,使得子类可以在不修改原有代码的基础上决定创建哪种类型的对象。 首先,我们来看这个模式的核心组成部分: 1. **产品接口(Product...

    创建型模式之工厂方法模式(Factory Method Pattern)

    在实际开发中,工厂方法模式常用于框架设计和数据库驱动等场景,例如ORM框架(如Hibernate)中,不同的数据库可能需要不同的连接策略,这可以通过实现不同的工厂方法来实现。另外,在多线程编程中,工厂方法也常用来...

    设计模式之“工厂方法模式[Factory Method Pattern]”

    工厂方法使一个类的实例化延迟到其子类。这种模式将类的创建过程封装起来,使得系统在不修改原有代码的情况下,可以通过更换不同的子类来创建不同的对象,实现了代码的解耦和扩展性。 ### 二、工厂方法模式的结构 ...

    c++-深入浅出讲解一下 “工厂方法模式 (Factory Method)”

    工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个具体类。这样,客户端代码就不需要知道具体的类是什么,只需通过工厂接口获取对象。 工厂...

    工厂方法和抽象工厂——Factory Method & Abstract Factory

    工厂方法模式是一种将对象的创建过程延迟到子类中实现的策略。它定义了一个创建对象的接口,但让子类决定实例化哪一个类。在工厂方法模式中,工厂角色(Factory)不再直接创建产品,而是由具体工厂(Concrete ...

    Factory Method 工厂方法模式(创建型模式)

    ### Factory Method 工厂方法模式(创建型模式) #### 概述 在软件工程领域,设计模式是一种在特定上下文中解决常见问题的通用方案。Factory Method(工厂方法)模式是GoF(Gang of Four)设计模式之一,属于创建型...

    Factory Method Pattern.rar【GoF的工厂方法模式(C#源码)】

    在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。 理解: 我们知道兵工厂可以...

    java工厂方法模式

    这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实体化哪一个类。 工厂方法模式的结构: * 抽象工厂(Creator):是工厂方法模式的核心,负责定义创建抽象产品对象的工厂方法。 * 具体...

    C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式)

    总的来说,工厂方法模式在C#中的应用广泛,尤其是在需要灵活地创建不同类型对象的场景下,它提供了更好的设计选择,有助于实现松耦合和高内聚的系统。通过学习和掌握工厂方法模式,开发者能够更好地设计和实现面向...

    工厂方法模式源代码

    工厂方法模式(Factory Method Pattern)是设计模式中的创建型模式之一,它定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这个模式使类的实例化延迟到了子类,也就是所谓的“多态性工厂”。在Java中,...

    工厂方法模式和抽象工厂模式

    这样,工厂方法将实例化对象的过程延迟到了子类,实现了对具体类的解耦。在Java或其他面向对象语言中,通常表现为一个抽象类或接口定义了一个工厂方法,而各个具体的子类重写这个方法来创建对应的实例。这种模式的一...

    002FactoryMethod.rar

    在工厂方法模式中,一个类的实例化延迟到了子类,这样做的好处是每个子类可以决定实例化哪一个类。这种类型的设计模式属于类创建型模式。 在面向对象编程中,我们通常使用new关键字来创建对象,但这样会将对象的...

    工厂方法模式Java代码

    在这个模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到子类中实现。这种模式的关键在于封装了对象的创建过程,并允许在运行时动态地决定创建哪个类的实例。 在Java编程中,工厂方法模式通常通过以下步骤...

    c++设计模式-工厂方法模式

    在压缩包中的`FactoryMethod`文件很可能包含了示例代码,这些代码演示了如何在实际的Qt项目中运用工厂方法模式,例如定义工厂类、产品类以及它们之间的关系,以及如何在主程序中调用这些工厂来创建和使用对象。...

    设计模式之工厂方法模式

    工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而实现了类的抽象化与具体实现的分离,提高了代码的可扩展性和可维护性。 ### 标题解析: “设计模式之工厂方法模式”表明...

    用工厂方法模式重构简易计算器 源代码+实验报告

    工厂方法模式(Factory Method Pattern)是面向对象设计模式的一种,它在实际开发中有着广泛的应用。本项目通过工厂方法模式重构简易计算器,旨在展示这种模式在实现基本计算功能时的优势。 首先,我们要理解工厂...

    软件体系结构与设计模式第十二章工厂方法模式.pptx

    * 当系统需要提供给用户某个类的子类的实例时,工厂方法模式可以将对象的实例化延迟到子类,使得系统更加灵活和可扩展。 * 当系统需要让用户代码和某个子类不形成耦合时,工厂方法模式可以提供给用户某个类的子类的...

    软件设计之工厂方法模式,源代码

    工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法模式中,我们定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。...

    工厂方法模式代码示例

    工厂方法模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化推迟到子类。这种模式将一个类的实例化延迟到了子类中,使得子类可以决定实例化什么样的对象。 ...

Global site tag (gtag.js) - Google Analytics