单态模式的回顾:
单态模式现在了类实例的创建。采用这种模式设计的类,可以保证仅有一个实例,并提供访问该实例的全局访问点。J2EE应用的大量组件,都需要保证一个类只有一个实例。比如,数据库引擎访问点只能有一个。更多的时候,为了提高性能,程序应该尽量减少Java对象的创建和销毁时的开销。使用单态模式可避免Java类的频繁实例化,让相同类的全部实例共享同一内存区。
为了防止单态模式的类被多次实例化,应将类的构造器设成私有的。这样,保证只能通过静态方法获得类实例。而该静态方法则保证每次返回的实例都是同一个,这就需要将该类的实例设置成类属性,该属性需要被静态方法访问,因此该属性应设成静态属性。下面给出单态模式的示例代码:
//单态模式测试类
Public class SingletonTest
{
//该类的一个普通属性
Int value;
//使用静态属性类保存该类的一个实例
Private static SingletonTest instance;
//构造器私有化,避免该类被多次实例化
Private SingletonTest()
{
System.out.println(“正在执行构造器…”);
}
//提供静态方法来返回该类的实例
{
//实例化类实例前,先检查该类的实例是否存在
If(instance==null)
{
//如果不存在,则新建一个实例
Instance=new SingletonTest();
}
//返回该类的成员变量:该类的实例
Return instance;
}
//以下提供对普通属性value的setter和getter方法
Public int getValue()
{
Return value;
}
Public void setValue(int values)
{
This.value=value;
}
Public static void main(String[] args)
{
SingletonTest t1=SingletonTest.getInstance();
SingletonTest t2=SingletonTest.getInstance();
T2.setValue(9);
System.out.println(t1==t2);
}
}
根据程序最后打印的结果,可以看出类的两个实例完全相同。这证明:单态模式的类的全部实例是同一共享实例。程序里虽然获得了类的两个实例,但实际上只执行一次构造器,因为对于单态模式的类,不管有多少此的创建实例请求,都只执行一次构造器。