effective--构造器和静态工厂方法
来源:互联网 发布:中国历史故事网软件 编辑:程序博客网 时间:2024/04/28 04:44
effective--构造器和静态工厂方法
一、静态工厂方法和构造器的异同点。
相同点:都可以用于实例化对象。
不同点:构造器实例化对象后没法精确地表达出实例化对象的用途和特点,而静态工厂方法可以比较精确地表达出实例化的对象的用途和特点。
二、使用静态工厂方法的优点(1)有名称,可以使产生的代码更加容易阅读,更加容易表明产生的对象的特点和用途。
/** * 演示静态工厂方法 * * @author LIUTAO * @version 2017/4/28 * @see * @since */public class Person { private String name; private int age; private String ownCar; private String ownHouse; public Person() { } public Person(String name, int age, String ownCar, String ownHouse) { this.name = name; this.age = age; this.ownCar = ownCar; this.ownHouse = ownHouse; } /** * 创建有车的人 * @param name * @param age * @param ownCar * @return */ public static Person personHasCar(String name,int age,String ownCar){ return new Person(name,age,ownCar,null); } /** * 创建有房的人 * @param name * @param age * @param ownHouse * @return */ public static Person personHasHouse(String name,int age,String ownHouse){ return new Person(name,age,null,ownHouse); } /** * 获取男性 * @param name * @param age * @param ownCar * @param ownHouse * @param sex * @return */ public static Person newMan(String name,int age,String ownCar,String ownHouse,String sex){ return new Man(name,age,ownCar,ownHouse,sex); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", ownCar='" + ownCar + '\'' + ", ownHouse='" + ownHouse + '\'' + '}'; }}
/** * 演示静态工厂方法 * * @author LIUTAO * @version 2017/4/28 * @see * @since */public class Test { public static void main(String[] args) { System.out.println(Person.personHasCar("liubei",45,"BMW")); }}
(2)调用的时候并不需要每次都创建一个新对象。
这中情况就需要类用有此类的相应对象作为静态变量,在静态方法中直接返回相应的静态变量即可。
注意静态变量和静态方法是在类首次被使用的时候初始化,而且类的静态变量在整个程序中只能包含一个,所以这就保证了调用的时候不需要每次都创建一个新 的对象。
(3)可以返回类的任何子类型对象。
如下Man类是Person的子类。我们现在可以在Person类中使用静态方法创建Man类的实例。
/** * 演示静态工厂方法 * * @author LIUTAO * @version 2017/4/28 * @see * @since */public class Man extends Person{ private String sex; public Man(String name, int age, String ownCar, String ownHouse, String sex) { super(name, age, ownCar, ownHouse); this.sex = sex; }}
(4)代码更加简洁,不需要重复指明参数,对于这一点目前在JDK1.7中已经不需要重复指明参数了。
三、使用静态工厂方法的缺点
(1)如果类不包含public或protect的构造方法将不能够被继承。
(2)和普通的静态方法相比,不能明确表明静态方法是否是用于实例化对象的。
四、惯用名称
valueOf – 类型转换方法.该方法返回的实例与它的参数具有相同的值
getInstance – 返回的实例是通过方法的参数来描述的.对于单例来说,该方法没有参数并返回唯一实例
newInstance – 确保返回的每个实例都与其他实例不同,其他功能同上
1 0
- effective--构造器和静态工厂方法
- Effective.Java 读书笔记(1)静态工厂和构造方法
- [Effective Java]考虑用静态工厂方法代替构造器
- Effective java-----用静态工厂方法取代构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- 【effective java】考虑用静态工厂方法替代构造器
- Effective Java -- 用静态工厂方法来代替构造器
- effective java--关于静态工厂方法代替构造器
- Effective Java 创建和销毁对象 1.考虑用静态工厂方法代替构造器
- 构造器和静态工厂方法
- effective java 之使用静态工厂方法替代构造方法
- 《Effective Java》: 考虑用静态工厂方法代替构造函数
- 【Effective Java】1.静态工厂方法来替换构造函数
- 静态工厂方法和构造方法
- Effective Java第一条:考虑用静态工厂方法替代构造器
- Effective Java (1) - 考虑用静态工厂方法代替构造器
- Effective Java(1)考虑静态工厂方法代替构造器
- Effective java读书札记第一条之 考虑用静态工厂方法代替构造器
- 排序算法之希尔排序
- .net 开发日志
- Mac sftp 设置使用公钥认证
- 飞得更高(五)下马威
- 点阵字库在JAVA中的实现
- effective--构造器和静态工厂方法
- Spring4整合Hibernate5
- HTML5/CSS3 移动平台对 META 标签的定义
- spring事务和对象锁
- HDU 3652 B-number(*数位DP)
- windows_redis
- Spring Boot 学习笔记(九) 数据缓存
- Log4 日志级别
- ExpressionTreeViewer安装与碰到的问题