public class SingLeton{
private static SingLeton instance = new SingLeton();
public static SingLeton getInstance(){
return instance;
}
} 为什么要把instance属性定义成 private 呢,而不是public
public static SingLeton instance = new SingLeton(); 定义成private 有什么好处, 其它包的类怎么调用这个(instance )属性啊
楼主【duzhonghua】截止到2008-07-07 10:42:03的历史汇总数据(不包括此帖):
发帖的总数量:62 发帖的总分数:2166
结贴的总数量:61 结贴的总分数:2166
无满意结贴数:9 无满意结贴分:272
未结的帖子数:1 未结的总分数:0
结贴的百分比:98.39 % 结分的百分比:100.00%
无满意结贴率:14.75 % 无满意结分率:12.56 %
值得尊敬
public class Singleton {
private static Singleton instace = null; // private 修饰,避免外部更改
private Singleton(){} // 隐藏构造函数
public static synchronized Singleton getInstance() { // 同步,避免同时创建多个实例
if (instance == null) {
instance = new ...
}
return instance;
}
}
private static Singleton instance = new Singleton(); private SingLeton(){
}
public static Singleton getInstance(){
return instance;
}
}这是单例模式几种实现方式中的一种,它是线程安全的,并且是实现方式中最为简单的一种。为什么使用自身实例的属性使用 private 而不使用 public 呢?这不是单例的问题,这是
个面向对象设计的问题,一般称为封装,当然要设成 public 照样正常工作。这样做的目的是为了进行封装一下,不让调用者直接使用其内部的属性,而提供一些 public
的方法接口进行调用。为什么要这样做呢,举个例子吧,比如现在需要增加一个需求,就是在调用单例时,做一些日
志的记录工作。 public static Singleton getInstance(){
log.info("get Singleton Instance");
return instance;
}如果是把属性改为 public 直接调用的话,这个要求就完不成了,呵呵~~