JAVA创建和销毁对象

虽然工作了两年仍然是个彩笔,就从effective java这本书开始学吧!

静态工厂方法

优点:有名称,不必每次调用创建新对象,可返回原返回类型的任何子类型对象,参数实例化更简洁。

缺点:如果不含共有的或受保护的构造器 就不能被实例化(目前不理解)

不必每次创建新对象:感觉针对的是不可变类

参数实例化更简介:类型推导(在JAVA7之后版本中有丰富了很多类型推导概念)

//较为繁琐的写法
Map<String, List<String>> map = new HashMap<String, List<String>>();

//若HashMap提供该静态工厂方法
public static <K, V> HashMap<K, V> newInstance(){
    return new HashMap<K, V>();
}

//通过静态工厂提供的简洁写法
Map<String, List<String>> map = HashMap.newInstance();

builder模式

核心在于创建对象时 “方便设置参数” 和 “和线程安全”。

1. 构造

    eg: new People(name,gender,age,address等);   设置参数却没有正好只有臃肿参数的构造时,无法挑选最恰当的构造

2. getter() setter()

    开放getter()和settting()方法,阻止了改类做成不可变的可能,这就需要保证线程安全(!?)

3. builer模式

    Builder是该类的静态成员类。如果类的参数或者静态工厂中具有多个参数,设计类时Builder模式是个不错的选择。

public class Person {
	private String Id;
	private String name;
	private String address;
	
	public static class Builder{
		//所必须的参数
		private final String Id;
		
		//可选的参数
		private String name = "";
		private String address = "" ;
		
		public Builder(String id){
			this.Id = id;
		}
		
		public Builder name(String name){
			this.name = name;
			return this;
		}
		
		public Builder address(String address){
			this.address = address;
			return this;
		}
		
		public Person build(){
			return new Person(this);
		}
	}
	
	private Person (Builder builder){
		this.Id = builder.Id;
		this.name = builder.name;
		this.address = builder.address;
	}
 
}

singleton(单例)

实现方法

  1. 声明类变量,创建时判断是否为null   
  2. 声明静态类变量,构造私有化             (以上两种方法需要注意1.序列化,2.瞬时的实例域,3.防止反射调用私有构造器)
  3. enum枚举类:    enum继承Enum,final无法继承,具有私有构造,java规定无法序列化反序列化enum(安全)

私有构造

     无法被子类化,子类无法调用超类的构造。

猜你喜欢

转载自blog.csdn.net/cdw_cc/article/details/81565893