美文网首页
Java创建和销毁对象

Java创建和销毁对象

作者: carrot_4d8d | 来源:发表于2019-03-02 11:02 被阅读0次
    • 考虑用静态工厂方法代替构造器

    静态工厂方法可以通过静态获取类的一个实例,而不需要通过构造器;

    • 使用静态工厂方法的优势

    1. 静态工厂有名称,易于使用,从方法名可知道创建实例的类型;

    有名称,易于使用;
    一个类需要多个签名相同的构造器时,使用静态工厂方法,可以区别出构造器的作用;

    2. 不必每次都创建新的实例,可以实现同一个对象的重复利用;
    3. 可以返回子类型;
    4. 创建参数化实例时,代码更加简洁;

    1.5版本前创建参数化类型实例:

    Map<String,List<String>> list = new HashMap<String,List<String>();
    

    以上方式需要两次提供类型参数,我们可以使用静态工厂方法来解决这一点,也称为类型推导

    public static <K,V> HashMap<K,V> newInstance(){
        return new HashMap<K,V>();
    }
    

    使用静态工厂方法后创建Map的方式:

    Map<String,List<String>> list = HashMap.newInstance();
    

    通过这种方式创建Map实例,编译器会根据类型进行推导创建出实例。


    • 用私有构造器或者枚举类型强化Singleton属性

    Singleton::仅仅被实例化一次的类。

    • 实现Singleton的三种方式

    1. 公有静态成员是个final域

    public class Elvis{
        //公有静态final数据域
        public static final Elvis INSTANCE = new Elvis();
    
        //构造器私有,因此外界的类无法通过构造器实例化对象
        private Elvis(){
            ...
        }
    }
    

    2. 公有成员是静态工厂方法

    public class Elvis{
        //私有静态数据域,用于创建类实例,外界不可调用
        private static final Elvis INSTANCE = new Elvis();
        //私有构造器,外界不可调用
        private Elvis(){
            ...
        }
        //公有静态工厂方法,用于返回类唯一的实例
        public static Elvis getInstance(){
            return INSTANCE;
        }
    }
    

    3. 编写一个包含单个元素枚举类型

    public enum Elvis{
        INSTANCE;
    }
    

    相关文章

      网友评论

          本文标题:Java创建和销毁对象

          本文链接:https://www.haomeiwen.com/subject/yikeuqtx.html