使用私有构造函数强化singleton属性:
实现singleton有两种方法:这两种方法都要把构造函数保持为私有的,并且提供一个静态成员,以便允许客户能够访问该类唯一的实例:
第一种方法:
public class Elvis{
public static final Elvis INSTANCE = new Elvis();
private Elvis(){
...
}
...//Remainder omitted
}
第二种方法:
提供了一个公有的静态工厂方法,而不是公有的静态final域;
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
private Elvis(){
...
}
public static Elvis genInstance(){
return INSTANCE;
}
...Remainder omitted
}
所有对于静态方法Elvis.getInstance()的调用,都会返回同一个对象引用,所以,不会有别的Elvis实例被创建。
第一种方法的好处在于,组成类的成员的声明很清楚地表明了这个类是一个singleton;公有的静态域是final的,所以该域将总是包含相同的对象引用。第一种方法可能在性能上稍微领先,但是在第二种方法中,一个优秀的JVM实现应该能够通过将静态工厂方法的调用内联化(inlining),来消除这种差别。
第二种方法的好处在于,它提供了灵活性;在不改变API的前提下,允许我们改变想法,把该类做出singleton,或者不做成singleton,singleton静态工厂方法返回该类的唯一实例,但是,他也很容易被修改,比如说,为每个调用方法的线程返回一个唯一的实例。
分享到:
相关推荐
Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...
参考文档:电梯直达 ... /// 私有构造函数 EventBus._internal(); /// 保存单例 static EventBus _singleton = new EventBus._internal(); /// 工厂构造函数 factory EventBus() => _singleton; /// 保
将对象的构造函数与copy构造函数声明为私有,那么只能通过类的成员函数或者是友元函数来调用构造函数,那么这里我们将只提供一个友元函数来调用该类的私有构造函数,那么如何确保实例化只有一个呢?干脆声明一个静态
A:1)首先必须将构造函数变为私有从而防止其他类实例化,并且只能有一个构造函数。因为系统会默认一个无参构造函数,而且默认public访问修饰符。 所以必须写一个私有无参让默认无效。(通常单例模式都是不带形参的)...
单例模式的三个特点: 1,该类只有一个... //私有的构造子(构造器,构造函数,构造方法) private Singleton(){} //公开,静态的工厂方法 public static Singleton getInstance() { return instance; } } 使用时 代码如
创建一个单体模式类,必须符合三个条件: 1:私有构造函数(防止其他对象创建实例); 2:一个单体类型的私有变量; 3:静态全局获取接口 下面我写一个类,为了看是不是单体,就加了一个计数器,如果是同一个类,...
这是我最喜欢的单例类,该类提供一个只有私有构造函数的类。
简单实现:使用私有构造函数 注册表实现: 用于注册和注销CompanyManager的注册表 注册表的接口,无法实例化,因此客户端无法创建自己的接口 具体类用于实例化单例 #复合模式 组件:BusinessUnit 具有所有共享的...
单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例。 实现1:懒汉式,线程不安全 该实现没有额外开销,不要求线程安全的情况...
懒汉式优化-加锁同步3.DCL双检锁/双重校验锁重排序问题多线程执行时序表volatile 作用优化-基于volatile 的双重检查锁4.IODH按需初始化持有者反射问题私有构造函数异常处理5.枚举实现单例使用推荐 什么是单例? 单例...
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 @Autowired 按照类型来装配 改变如下: package com.baobaotao; import org.springframework.beans....
构造函数是和类同名的函数,没有返回类型,构造函数不能在普通的程序里面调用,只有当这个类被应用new实例化的时候才会被运行。构造函数没有返回类型,实际上,构造函数返回的就是这个class本身。 类初始化时构造函数...
官方网站: Java中的100个单词GoF设计模式 介绍 想法:以一种简单的方式描述GoF...如果我们实现一个默认构造函数的作用域为“私有”的类,则只有该类中的方法可以调用该构造函数,这意味着我们无法从其他类中实例化
DesignModeDemo 23种设计模式swift实现 一、设计模式七大原则(有些地方使用六大原则,没有第六调,此处主要是总结,用于学习) ...关键代码:构造函数是私有的。 应用实例: 使用场景: 1、要求生产唯一序列号。 2、创
给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和...
静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何...
我们把该类的构造器使用Private修饰,从而把该 类的所有构造器隐藏起来。 –2.则需要提供一个public方法作为该类的访问点,用于创建该类的对象,且必须使用static修饰 –3.该类还必须缓存已经创建的对象,必须...
抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。 41.构造器Constructor是否可被override? 答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被...
不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface...