1、静态工厂方法相较于构造器的优点      a、静态工厂方法能够自定义名称,使代码可读性更高      b、不必在每次调用的时候都创建新的实例      c、可以返回类型的子类型对象

2、静态工厂方法的常用名称: value of getInstance newInstance getType newType
import java.util.HashMap;
import java.util.Map;/*** @description: 用于提供服务者注册API、服务访问API, 不可实例化 (类似JDBC中的Driver)* @author: huguanghui* @date: 2019-06-03 13:27*/
public class ServiceManager {//服务提供者缓存private static final Map<String, IProvider> providerMap = new HashMap<>();//默认服务提供者名称private static final String DEFAULT_PROVIDER_NAME = "def";//私有化构造器private ServiceManager() {}/*** 注册服务提供者** @param providerName* @param provider*/public static void registerProvider(String providerName, IProvider provider) {providerMap.put(providerName, provider);}public static void registerDefaultProvider(IProvider provider) {providerMap.put(DEFAULT_PROVIDER_NAME, provider);}/*** 获取服务访问实例** @param providerName* @return*/public static IService getInstance(String providerName) {IProvider provider = providerMap.get(providerName);if (provider == null) {throw new IllegalArgumentException("未找到相应的服务提供者:" + providerName);}return provider.newService();}public static IService getInstance() {return getInstance(DEFAULT_PROVIDER_NAME);}
}

/*** @description: 服务接口 (类比于JDBC中的Connection类)* @author: huguanghui* @date: 2019-06-03 13:27*/
public interface IService {void doSomeService();
}

/*** @description: 服务提供者接口 (类似JDBC中的Driver)* @author: huguanghui* @date: 2019-06-03 13:27*/
public interface IProvider {IService newService();
}

github源码连接

转载于:https://www.cnblogs.com/sanbanfu/p/10967985.html

一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器相关推荐

  1. 小鸡爪读Effective Java记录1:用静态工厂方法代替构造器

    //小鸡爪 == 菜鸡 遇到多个构造器参数时要考虑使用构建器 Preface 静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数.比如用一个类表示包装食品外面显示的营养成分标签.这 ...

  2. 【Effective Java】第二章:静态工厂、构建器、强化Singleton属性、私有构造器、

    文章目录 一. 用静态工厂方法代替构造器 优势: 劣势: 实例代码: 二. 遇到多个构造器参数时要考虑使用构建器 ① 重叠构建器 ② JavaBeans模式 ③ Builder模式 三. 用私有构造器 ...

  3. 《Effective Java》学习笔记 - (1) 使用静态工厂方法代替构造器

    文章目录 前言 使用静态工厂方法代替构造器 1. 优点 1.1 静态工厂方法有名称 1.2 不必每次调用的时候都创建一个对象 1.3 可以返回类型的任何子类型的对象 1.4 所返回的对象的类型可以随着 ...

  4. java 静态工厂方法代替构造器的好处

    Java 的静态工厂方法 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第 ...

  5. Effective Java 第一条:考虑用静态工厂方法代替构造器

    优势: 第一条:静态工厂方法有名称,可以从名字看出方法的作用,容易使用. 第二条:不必每次调用都创建一个新对象. 第三条:静态工厂方法可以返回原类型的任何子类型的对象. 第四条:在创建参数化类型的实例 ...

  6. Java九十条经验法则之第一条:用静态工厂方法代替构造器

    一.用静态工厂方法代替构造器的优势 1.静态构造方法与构造器不同的第一大优势在于,他们有名称,而构造器名字相同,容易混淆,例如: 使用静态构造方式的方式,我们就可以通过知道产生的是什么样类型的对象,而 ...

  7. effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候

    yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...

  8. Java 静态工厂方法详解

    Java 静态工厂方法详解 本文章主要是对<Effective Java>对静态工厂方法的理解 第一次使用静态工厂方法是在HIT<Software Construction>课 ...

  9. Java 的静态工厂方法

    序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第三个优势,可以返回原返回类 ...

最新文章

  1. NLP实战:利用Python理解、分析和生成文本 | 赠书
  2. 如何备考上海市高等学校计算机一级,计算机一级考试备考攻略
  3. 中国出版业,九死一生
  4. maven 打包时缺少文件_解决Intellij Idea下使用Maven项目打包时部分文件缺失问题
  5. 674 Longest Continuous Increasing Subsequence(每日一题)
  6. 分治算法兵乓球比赛日程(java)
  7. Git 日常开发常用命令
  8. 自动挡车行驶当中,一个不小心碰到一键启动按钮,会怎样?
  9. MYSQL锁机制---MyISAM表锁
  10. tomcat官网下载详细步骤
  11. 五险一金 | 2020年企业社保缴费为零问题
  12. 【Java面试题】利用5升和6升两个水桶得到3升水
  13. Win10锁屏壁纸位置在哪?默认锁屏壁纸怎么提取
  14. 针对 Windows 和 WSUS 的 2019 SHA-2 代码签名支持要求
  15. 安卓音频输出采样率_安卓里LDAC的采样率问题
  16. JPEG图像格式及文件结构
  17. html给页面整体添加左右边距_css div 网页的页面边距怎么控制
  18. CSS(二)——Flex布局 边框 渐变 过渡 动画
  19. 山东省技能兴鲁职业技能竞赛-人工智能工程技术人员
  20. C#练习题答案: 反恐精英系列【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

热门文章

  1. htc816t Android go,HTC D816t(Desire D816t 移动4G)一键刷机图文教程详解
  2. 迁移分支_资料 | 迁移学习简明手册
  3. 招聘APP如何搭建信用体系以避免求职者被骗
  4. php实现身份证号码获取归属地地址的实列教程,含完整全国地区归属数据!
  5. php图片上传不现实路径指向错误,上传图片提示这个错误怎么办?
  6. 博图能打开s7200吗_域名掉备案了,还能打开吗?域名掉备案了怎么办?
  7. Web前后端笔记-vue封装http请求添加signature及后端(Java)解析并验证
  8. Qt工作笔记-保存textEdit中的数据,并自动打开文件
  9. 节约内存编程方式操作系统(全概念)
  10. java 多线程日志_多线程 打印的日志出现重复行