《Effective Java》学习笔记-01

本文探讨了在Java中使用静态工厂方法代替构造器的优点与局限性。介绍了如何利用静态工厂方法减少对象创建次数、提供多种实例化方式、实现类型多态及简化泛型实例化过程。

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

创建和销毁对象--考虑用静态工厂方法代替构造器

import java.util.HashMap;
import java.util.Map;

/**
 * @author Yoko
 * 《Effective Java》第二版:
 * 创建和销毁对象
 * 第一条:考虑用静态工厂方法代替构造器
 * 优点: 1.静态工厂方法都可以有自己的名称
 * 	 2.不必再每次调用它们的时候都创建一个新对象
 *       3.可以返回类型的任何子类型的对象
 * 	 4.在创建参数化类型实例的对象,使代码变的更加简洁
 * 缺点: 1.类中如果不含有公有或者受保护的构造器,就不能被子类化,不能被继承
 * 	 2.其实静态工厂方法与其他的静态方法没有区别
 */
class Animal {
	/*
	 * 使用静态工厂方法对于构造器的优势之:
	 * 通过静态工厂方法返回实例对象,并且是返回同一个实例对象。不必再每次调用的时候都创建一个新对象。
	 * 
	 */
	private static Animal animal = new Animal();
	public static Animal getInstance(){
		return animal;
	}
	
	/*
	 * 使用静态工厂方法对于构造器的优势之:
	 * 都可以存在不同的名称,用于获取不同的实例对象
	 */
	private String color = null;
	private String Varieties = null;
	public Animal() {
		
	}
	public Animal(String color, String varieties) {
		this.color = color;
		this.Varieties = varieties;
	}
	//获取只含有颜色属性的动物信息
	public static Animal getOnlyColorAnimal(String color){
		return new Animal(color, null);
	}
	//获取只含有品种属性的动物信息
	public static Animal getOnlyVarietiesAnimal(String varieties){
		return new Animal(null, varieties);
	}
	//获取含有所有属性的动物信息
	public static Animal getAnimal(String color, String varieties){
		return new Animal(color, varieties);
	}
	
	/*
	 * 使用静态工厂方法对于构造器的优势之:
	 * 可以返回原返回类型的任何子类型的对象,但是父类必须含有public或者protect修饰的构造方法,
	 * 否则子类不可以继承父类。
	 */
	public static AnimalTest getInstance1(){
		return new Dog();
	}
	

	/*
	 * 使用静态工厂方法对于构造器的优势之:
	 * 在创建参数化类型实例的时候,可以使代码更加简洁。
	 */
	public static <K,V> HashMap<K, V> newInstance(){
		return new HashMap<K,V>();
	}
}
class Dog extends AnimalTest {
	public void call(){
		System.out.println("狗狗会汪汪叫");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值