改善JAVA代码01:考虑静态工厂方法代替构造器
前言
系列文章:[传送门]
每次开始新的一本书,我都会很开心。新书新心情。

正文
静态工厂方法代替构造器
说起这个,好多可以念叨的。做了一年多的项目,慢慢也有感触。
说起构造器
大家很明白,构造器可以让我们在何处何地获取自身或者他人一个实例。我们是无忌惮的使用着 new 却从来没考虑过人家的感受。其实new ,new一个对象,就是开辟一块内存空间给这个对象。如果何处何地,都new的话,漫山遍野...
五颜六色的new ,本质却一样
一句话:构造器虽是万能,但是要珍惜。
再谈谈 静态工厂方法
静态工厂方法,顾名思义,只是一个返回类实例的静态方法。这里有个不切当的比喻,我觉得静态工厂方法的好处,就像手龙头一样,一直有水(对象)。要就用这个方法呗。
看看下面的简单例子吧
public static Boolean valueOfBoolean(Boolean b)
{
return b ? Boolean.TRUE : Boolean.FALSE;
}
#boolean基本类型转换成Boolean对象引用。
#static
根据上面例子,相比构造器,大家和我一起讨论下:
1 它开始有名称
2 不必每次调用它们,创建一个新对象
3 返回原返回类型的任何子类型的对象
服务访问API -----灵活的动态工厂
下面实现一个服务提供者接口和一个默认提供者:
package src.day01; import java.util.concurrent.ConcurrentHashMap; /**
* Created with IntelliJ IDEA.
* User: Li
* Date: 14-5-12
* Time: 下午10:52
* To change this template use File | Settings | File Templates.
*/
public interface Service {
} public interface Provider {
Service newService();
}
public class Services {
private Services(){} private static final Map<String , Provider> providers = new ConcurrentHashMap<String , Provider>(); public static final String DEFAULT_PROVIDER_NAME = "<def>";
public static void registerDeafaultProvider(Provider p)
{
registerProvider(DEFAULT_PROVIDER_NAME,p);
}
public static void registerProvider(String name , Provider p)
{
providers.put(name,p);
} public static Service new Instance()
{
return newInstance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name )
{
Provider p = providers.get(name);
if(p == null)
throw new IllegalArgumentException(
"no..."
);
return p.newService();
}
}
#providers
# newInstance 该方法为静态工厂方法
这个例子则告诉我们
4 他们在创建参数化类型实例时候,代码更加简洁。
总结
静态工厂方法
1 它开始有名称
2 不必每次调用它们,创建一个新对象
3 返回原返回类型的任何子类型的对象
4 他们在创建参数化类型实例时候,代码更加简洁。
(生活离不开寻找对象,寻找方式,你说呢?)
感谢及资源共享


路上走来一步一个脚印,希望大家和我一起。
感谢读者!很喜欢你们给我的支持。如果支持,点个赞。
知识来源: http://book.douban.com/doulist/4039229/
改善JAVA代码01:考虑静态工厂方法代替构造器的更多相关文章
- [改善Java代码]用枚举实现工厂方法模式更简洁
工厂方法模式(Factory Method Patter)是"创建对象的接口",让子类决定实例化哪一个类,并使一个类的实例化延迟到其子类.工厂方法模式在我们的开发工作中,经常会用到 ...
- 【读书笔记 - Effective Java】01. 考虑用静态工厂方法代替构造器
获取类的实例有两种方法: 1. 提供一个公有的构造器(最常用). 2. 提供一个公有的静态工厂方法(static factory method). // 静态工厂方法示例 public static ...
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...
- effective java 3th item1:考虑静态工厂方法代替构造器
传统的方式获取一个类的实例,是通过提供一个 public 构造器.这里有技巧,每一个程序员应该记住.一个类可以对外提供一个 public 的 静态工厂方法 ,该方法只是一个朴素的静态方法,不需要有太多 ...
- 高效JAVA之用静态工厂方法代替构造器
程序员这行干的久了,总会染上一些恶习,我就染上一个让人深恶痛绝,自己却津津乐道的习惯,还不想改的那种,它可以叫做强迫症,也可以叫做洁癖.那就是我不允许我的IDEA出现一点点警告,什么黄色背景,绿色波浪 ...
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...
- Java - 用静态工厂方法代替构造器
Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...
- Effective java读书札记第一条之 考虑用静态工厂方法取代构造器
对于类而言,为了让client获取它自身的一个实例,最经常使用的方法就是提供一个共同拥有的构造器. 另一种放你发,也应该子每一个程序猿的工具箱中占有一席之地.类能够提供一个共同拥有的静态 工厂方法.它 ...
- 静态工厂方法VS构造器
我之前已经介绍过关于构建者模式(Builder Pattern)的一些内容,它是一种很有用的模式用于实例化包含几个属性(可选的)的类,带来的好处是更容易读.写及维护客户端代码.今天,我将继续介绍对象创 ...
随机推荐
- 继承中的prototype与_proto_
继承的核心是原型链,它的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 例:SubType.prototype = new SuperType (); var instance = ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第7周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第7周学习总结 教材学习内容总结 第八章 常用实用类 一.String类 String类在java.lang包中,jav ...
- JS模块化工具require.js教程(二):基本知识
前一篇:JS模块化工具我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等 基本API require会定义三个变量:define,r ...
- [转].NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别
转至:https://segmentfault.com/a/1190000011539920 前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错.但还是有 ...
- docker install
1.安装必要工具集 sudo yum install -y yum-utils 2.安装Docker官方源 sudo yum-config-manager \ --add-repo \ https:/ ...
- js实现图片查看器(图片的缩放、旋转、拖拽)
一.关于图片查看器. 目前网络上能找到的图片查看器很多,谁便一搜就能出来.如:jquery.iviewer.js.Viewer.js这两个js文件,其中功能也足够满足大部分开发需求.但是单纯的就想实现 ...
- git安装以及初始化
安装文档参见:https://www.cnblogs.com/ximiaomiao/p/7140456.html 注意:安装成功后,用cmd进行基本信息设置时,当出现“git不是内部或外部命令,也不是 ...
- Visual Studio 常见的快捷键
“Ctrl + -” 回到上一个光标位置 “Ctrl + Shift + -” 前进到下一个光标位置 “Ctrl + C” ...
- centos7的Kubernetes部署记录
一.使用vm创建了三个centos系统,基本细节如下: 1.1 修改三台机器对应的主机名: [root@localhost ~] hostnamectl --static set-hostname k ...
- Android开发 - 掌握ConstraintLayout(九)分组(Group)
使用ConstraintLayout后我们的布局是没有层级关系的,各个View之间都是平级关系,但是如果根据某个业务条件来控制多个View的显示与否,我们需要分别对每个View进行控制,需要调用多次s ...