使用静态工厂方法的好处和坏处

19 篇文章 ¥19.90 ¥99.00
本文探讨了静态工厂方法相对于构造函数的优势,如更易理解和重用,以及性能提升。同时,指出了其可能导致的无法继承和不易识别的问题。文章建议根据具体需求灵活选择使用静态工厂方法或构造函数,并提供了实现Singleton模式的两种方法,强调了设计的灵活性和可维护性。

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

前言: 清晰性和简介性是最为重要的
      一个模块的使用者永远也不应该被模块的行为所迷惑(那样就不清晰了),模块要尽可能的小,但又不能太小【术语模块(module):是指任何可重用的软件组件,从单个方法到包含多个包的复杂系统都可以是一个模块】。代码应该被重用,而不是拷贝,模块之间的相依性应该尽可能降低到最小,错误应该尽早被检测出来,理想的情况下是在编译的时刻。

NO.1 考虑用静态工厂方法代替构造函数
      静态工厂方法好处:
      ①构造函数有命名的限制,而静态方法有自己的名字,更加易于理解。
      ②静态工厂方法在每次调用的时候不要求创建一个新的对象。这种做法对于一个要频繁创建相同对象的程序来说,可以极大的提高性能。它使得一个类可以保证是一个singleton;他使非可变类可以保证“不会有两个相等的实例存在”。
      ③静态工厂方法在选择返回类型时有更大的灵活性。使用静态工厂方法,可以通过调用方法时使用不同的参数创建不同类的实例,还可以创建非公有类的对象,这就封装了类的实现细节。
      静态工厂方法坏处:
      ①如果一个类是通过静态工厂方法来取得实例的,并且该类的构造函数都不是公有的或者保护的,那该类就不可能有子类(被继承),子类的构造函数需要首先调用父类的构造函数,因为父类的
### 使用静态工厂方法实例化对象 在 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
发出的红包

打赏作者

蒙奇·D·路飞-

感谢老板您就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值