静态工厂方法和实例工厂方法的区别

本文介绍了Spring框架中Bean的三种实例化方式:构造器生成、静态工厂方法及实例工厂方法,并详细解释了静态工厂方法与实例工厂方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习Spring bean的实例化方式的时候遇到的一个问题,Spring bean实例化有3种方法 1、构造器生成 2、静态工厂方法 3、实例工厂方法
那么问题来了,什么是静态工厂方法,什么是实例工厂方法?

静态工厂方法

就是直接可以通过静态方法来实例化一个对象

public class HelloWorldFactory {
    public static HelloWorld getInstance(){
        return new HelloWorld();
    }
}
HelloWorldFactory.getInstance()

创建 HelloWorld 对象直接可以调用getInstance方法来进行实现

实例工厂方法

就是先创建类对象,如何通过对象来调用创建实例对象的方法

public class HelloWorldFactory {
    public HelloWorld createHelloWorld(){
        return new HelloWorld();
    }
}
HelloWorldFactory helloFactory = new HelloWorldFactory();
helloFactory.createHelloWorld();
### 使用静态工厂方法实例化对象 在 Java 中,静态工厂方法是一种常用的设计模式,用于创建对象而不暴露创建逻辑。这种方式使得客户端可以更方便地获取对象实例,而无需关心具体实现细节。 #### 创建静态工厂方法的类 定义一个包含多个静态工厂方法的类 `CarFactory` 来展示这一概念: ```java public class Car { private String model; // 私有构造函数防止外部直接实例化 private Car(String model) { this.model = model; } // 静态工厂方法之一:创建轿车模型 public static Car createSedan() { return new Car("Sedan"); } // 另一个静态工厂方法:创建跑车模型 public static Car createSportsCar() { return new Car("Sports Car"); } } ``` 此代码片段展示了两个静态工厂方法 `createSedan()` `createSportsCar()`,这两个方法都返回了不同类型汽车的新实例[^1]。 #### 调用静态工厂方法 为了使用这些静态工厂方法来获得新的 `Car` 对象,可以在其他地方这样写: ```java // 不需要显式导入Car类因为已经在同一文件夹内 public class MainApp { public static void main(String[] args) { // 通过静态工厂方法创建对象而不是new关键字 Car myDailyDriver = Car.createSedan(); System.out.println("My daily driver is a " + myDailyDriver.getModel()); Car weekendFun = Car.createSportsCar(); System.out.println("For weekends, I drive a " + weekendFun.getModel()); // 输出结果应为: // My daily driver is a Sedan // For weekends, I drive a Sports Car } // 增加getter以便打印model名称 public String getModel(){ return this.model; } } ``` 这段程序说明了如何利用静态工厂方法简化对象创建过程,并且保持了封装性,即内部构造逻辑对外部不可见[^3]。 #### 关联到接口中的静态方法 自 Java 8 开始支持在接口中声明默认静态方法。虽然这看起来似乎与静态工厂方法有关联,但实际上两者服务于不同的目的。前者主要用于提供可选行为或工具性质的功能;后者则是面向对象编程的一种实践形式,旨在优化对象构建流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值