A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沟门大杏 中级黑马   /  2014-8-4 12:36  /  1843 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

单例模式(Singleton)
       这个模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。这样做就是为了节省内存空间,保证我们所访问到的都是同一个对象。
       单例模式要求保证唯一,那么怎么样才能保证唯一性呢?对了,这就是静态变量。单例模式有以下两种形式:
第一种形式:
package reflect;
public classSingleton {
    /*
     * 注意这是private私有的构造方法, 只供内部调用
     * 外部不能通过new的方式来生成该类的实例
     */
    privateSingleton() {
    }
    /*
     * 在自己内部定义自己一个实例,是不是很奇怪?
     * 定义一个静态的实例,保证其唯一性
     */
    private staticSingleton instance = newSingleton();
    // 这里提供了一个供外部访问本class的静态方法,可以直接访问
    public staticSingleton getInstance() {
           return instance;
    }
   
}
/**
*测试单例模式
*/
class SingRun{
    public static voidmain(String[] args){
       //这样的调用不被允许,因为构造方法是私有的。
       //Singletonx=new Singleton();
      
       //得到一个Singleton类实例
       Singletonx=Singleton.getInstance();
      
       //得到另一个Singleton类实例
       Singletony=Singleton.getInstance();
      
       //比较x和y的地址,结果为true。说明两次获得的是同一个对象
       System.out.println(x==y);
    }
}
第二种形式:
public classSingleton {
    //先申明该类静态对象
    private staticSingleton instance = null;
   
    //创建一个静态访问器,获得该类实例。加上同步,表示防止两个线程同时进行对象的创建
    public static synchronizedSingleton getInstance() {
      
       //如果为空,则生成一个该类实例
       if (instance == null){
           instance = newSingleton();
       }
       return instance;
    }
}

6 个回复

倒序浏览
有两个地方不同意楼主
其一,单例的目的不是节省内存,如果有需要,内存你该浪费就要浪费
单例的目的是保证对象的唯一性
其二,保证唯一的手段是类内部创建实例,对外提供共有的访问方法,跟所谓的静态没有关系
构造器是私有的,访问方法时公共的,静态不是必须的。
回复 使用道具 举报
new不了对象!!只能类名修饰了
回复 使用道具 举报
路过看看
回复 使用道具 举报
不错,虚心学习了!!!!
回复 使用道具 举报
看回复觉得有道理
回复 使用道具 举报
学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马