单态模式

单态模式限制了类实例的创建,但采用这种模式设计的类,可以保证仅有一个实例,并可提供访问该实例的全局访问点。J2 EE 应用的大量组件,都需要保证一个类只有一个实例。比如数据库引擎访问点只能有一个。

更多的时候,为了提高性能,程序应尽量减少 Java 对象的创建和销毁时的开销。使用单态模式可避免 Java类被多次实例化,让相同类的全部实例共享同一内存区。为了防止单态模式的类被多次实例化,应将类的构造器设成私有,这样就保证了只能通过静态方法获得类实例。而该静态方法则保证每次返回的实例都是同一个,这就需将该类的实例设置成类属性,由于该属性需要被静态方法访问,因此该属性应设成静态属性。

下面给出单态模式的示例代码:
public class SingletonTest {

/**
* @param args
*/
// 该类的一个普通属性。
int value;
//使用静态属性类保存该类的一个实例。
private static SingletonTest instance;
//构造器私有化,避免该类被多次实例。
private SingletonTest(){
System.out.println("正在执行构造器...,,");
}
//提供静态方法来返回该类的实例。
public static SingletonTest getInstance(){
//实例化类实例前,先检查该类的实例是否存在
if (instance == null)
//如果不存在,则新建一个实例。
instance = new SingletonTest();
//返回该类的成员变量:该类的实例。
return instance;
}
public int getValue(){
return value;
}
public void setValue(int values){
this.value = values;
}
public void print(){
System.out.println(value);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SingletonTest tl = SingletonTest .getInstance();
SingletonTest t2 = SingletonTest .getInstance();
t2.setValue(9);
t2.print();
System.out.println(tl == t2);
tl.print();


}


结果:
正在执行构造器...,,
9
true
9
上面如果注释掉if (instance == null).则结果为:
正在执行构造器...,,
正在执行构造器...,,
9
false
0

从程序最后的打印结果可以看出,该类的两个实例完全相同。这证明单态模式类的全部实例是同一共享实例。程序里虽然获得了类的两个实例,但实际上只执行一次构造器,因为对于单态模式的类,无论有多少次的创建实例请求,都只执行一次构造器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值