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

创建和销毁对象

作者: badcyc | 来源:发表于2017-10-13 21:37 被阅读0次

    考虑用静态工厂方法代替构造函数

    静态工厂方法只是一个简单的静态方法,它返回的是类的一个实例

    三个优点
    • 静态工厂方法与构造函数不同,静态工厂方法具有名字。

    如果一个构造函数的参数并没有确切的描述被返回的对象,那么选用适当名字的静态工厂可以使用一个类更易于使用,并且相应的客户代码更易于阅读。

    • 它们每次被调用的时候,不要求非得创建一个新得对象。

    1.这使得一些非可变类可以使用一个预先构造好的实例,或者把已经构造好的实例缓存起来,以后再把这些实例飞发给客户,从而避免创建不必要的重复对象。
    2.静态工厂方法可以重复的调用返回同一个对象,这可以被用来控制"在某一时刻哪些实例应该存在".

    • 它们可以返回一个原返回类型的子类型的对象
    两个缺点
    • 类如果不含有公有的或者受保护的构造函数,就不能被子类化。
    • 它们与其它静态方法没有任何区别

    使用私有构造函数强化singleton属性

    singleton类是指这样的类,他只能实例化一次。singleton通常被用来代表那些本质上具有唯一性的系统组件,比如视频显示或者文件系统。

    • 实现singleton有两种方法。这俩种方法都要把构造函数保持为私有的,并且提供一个静态成员,以便允许客户能够访问该类的唯一实例。
    //Singleton with final field
    public class Elvis{
    pulic static final Elvis INSTANCE =new Elvis();
    private Elvis(){
    ···
    }
    ···//Remainder omitted剩余部分省略
    }
    

    私有构造函数仅被调用一次,用来被实例化公有的final域Elvis.INSTANCE。由于缺少公有的或者受保护的构造函数,所以保证了Elvis的全局唯一性:一旦Elvis类被实例化之后,只有一个Elis实例存在——不多也不少。

    • 提供一个公有的静态工厂方法,而不是公有的静态final域
    public class Elvis{
    private static final Elvis INSTANCE =new Elvis();
    private Elvis(){
    ···
    }
    public static Elvis getInstance(){
    return INSTANCE;
    }
    ...//Remainder omitted
    }
    

    所有对于静态方法Elvis.getInstance的调用,都会返回同一个对象引用,所以,不会有别的Elvis实例被创建。

    相关文章

      网友评论

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

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