【effective java】1.考虑用静态工厂方法代替构造器

本文探讨了使用静态工厂方法的四大优点:明确的方法命名有助于理解功能;避免频繁创建新对象,适合单例模式;便于构建基于接口的框架,提高灵活性;简化泛型类实例创建过程。同时介绍了服务提供者框架的概念及其应用场景。

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


1.why
a)有名称:假设有一个对象,这个对象有很多构造函数,并且构造函数返回内容不同,这时候如果没有文档就麻烦了,但是如果有个方法,这个方法有名称,跟明确的表示我是干嘛的,这时候就很容易记住了 (如:BigInteger.probablePrime())

b)不必每次都创建新对象
适用于单例模式

c)构成基于接口的框架
静态工厂方法返回对象所属的类可以是后来动态添加的,这样在返回对象是就比较灵活 (比如我们的代码中:用户下载网易云音乐有两个实现类,一个是移动端,一个是pc端,但是对于用户来说是看不到这两个实现类的,所以我们新增类杜宇用户来说是隐僻的)

d)创建泛型类实例的代码更为简洁
```
//使用构造器创建
Map<String, List<String>> m1 = new HashMap<String, List<String>>();
//使用静态工厂方法创建
Map<String, List<String>> m2 = HashMap.newInstance();
```

2.how


服务接口: 提供者实现 (应用市场对音乐客户端的规定)
提供者注册API: 系统用来注册实现,让客户端访问 (应用市场对商家的规定)
服务访问API: 客户端用来获取服务的实例 (网易云音乐(商家)向应用市场注册)
服务提供者接口: 负责创建其服务实现的实例 (用户下载客户端)


所谓服务提供者,就是说一方提供服务,比如网易云音乐;另一方消费服务,比如用户。而双方都要遵守应用市场的规定,网易云音乐根据规定将他们的服务放在应用市场上,用户从应用市场下载客户端软件并欣赏歌曲。为什么要用这样的框架呢?因为市场上可能有很多音乐提供商,比如酷狗音乐、QQ音乐、虾米音乐等等,用户可以随意选用任何一个商家的服务,而不必关心这个服务具体是如何实现的。

3.where
spring的Bean初始化最后一步注册bean就是通过该方法注册到IOC容器中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值