单件模式定义: 确保一个类只有一个实例,并提供一个全局访问点。 (1)一个类只有一个实例就是在类内声明一个本类的对象引用。 (2)提供一个全局访问点就是在类内提供一个实例化该对象引用的公有静态方法 (3)要将类内的对象引用和全局访问点(实例化该对象引用的方法)声明为public和static。因为二者要通过类名在类外使用 (4)经全局访问点实例化后的对象引用,可以在类外调用类内的其他公有方法。 以下是单件模式的一个代码示例:
public class singleton { public static singleton si; private singleton() {} public static singleton getinstance() { if(si==null) si=new singleton(); //如果该静态对象引用之前并未被实例化,则调用私有构造器,实例化一个对象赋于类内的这个静态对象引用 //如果该静态对象引用之前已经被实例化,则直接执行下面的语句,将类内的这个静态对象引用返回 return si; /*类似于私有数据成员不能在类外直接访问,但是可以通过公有方法对私有数据成员进行间接访问。 //单件模式与其类似,由于构造方法为私有的,所以在类内不能直接实例化出该类的对象,但是可以用同样的方法通过调用公有方法 在类内得到一个实例化对象,然后通过类内这个自身类的对象引用调用自身的方法*/ } public void speak() //该方法的调用需要用到类内的自身类的对象引用si来调用 { System.out.println("哥是单件模式!!!")````````` } } public class test { public static void main(String[] args) { // TODO code application logic here singleton.si=null; //先将单件模式定义的类中的对象引用赋值为空 singleton.getinstance(); //调用单件模式定义的类中的公有方法,为类中的对象引用赋值(完成实例化) singleton.si.speak(); //然后通过对象引用调用类内的公有方法 } }注: (1)采用单件模式定义的类不能在类外像其他正常类一样用new运算符创建对象 (2)采用单件模式定义的类内含有一个自身类的静态对象引用和一个静态方法(返回值为本类的对象引用),该静态方法将返回值赋给类内的静态对象引用。所以说单件模式的类只能有一个实例化对象。
