码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式--两种方式

时间:2014-11-20 11:46:17      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   使用   java   on   div   

package com.factory;
/*
 * 第一种方式创建单例
 */
class OneSingleton{
    private static int number =0;       //私有属性
    private static OneSingleton instance = new OneSingleton();  //OneSingleton的唯一实例
    private OneSingleton(){}
    public static OneSingleton getInstance(){
        return instance;
    }
    public synchronized int getNumber(){    //synchronized关键字表示方法是线程同步
        return number;                      //任一时刻最多只能有一个线程进入该方法
    }
    public synchronized int nextNumber(){
        return number++;
    }
}
/*
 * 第二种创建单例方法
 */
class TwoSingleton{
    private static int number =0;
    private static TwoSingleton instance = null;
    private TwoSingleton(){}
    public static synchronized TwoSingleton getInstance(){
        if(instance == null){
            instance = new TwoSingleton();
        }
        return instance;
    }
    public synchronized int getNumber(){
        return number;
    }
    public synchronized int nextNumber(){
        return number++;
    }
}
/**
 * @function 单例模式
 * @author JarCode
 * 技术要点:
 * 单例模式有两种实现方式:
 * >>一种是将类的 构造方法私有化,用一个私有的类变量instance保存类的实例,
 *在加载类时,创建类的实例,改方法直接返回instance.
 * >>另一种是将类的 构造方法私有化,用一个私有的类变量instance保存类的实例,
 *在加载类时,将null赋给instance,再提供一个公有的静态方法getInstance
 * ,用于获取类的唯一实例,该方法首先判断instance是否为null,
 *如果为null,则创建实例对象,否则返回instance。
 *
 * 两种方式的区别:
 * >>前者被加载时,类的唯一实例被创建,后者在第一次调用getInstance()方法时,类的唯一实例被创建,但需要在getInstance()方法中使用synchronized
 * 关键字,保证某一时刻只有一个线程调用此方法。
 *
 */
public class TestSingleton {
    public static void main(String[] args) {
        OneSingleton one1 = OneSingleton.getInstance();
        OneSingleton one2 = OneSingleton.getInstance();
        System.out.println("用onsingleton实现单例模式");
        System.out.println("调用nextnumber()方法之前:");
        System.out.println("one1.number="+one1.getNumber());
        System.out.println("one2.number="+one2.getNumber());
        one1.nextNumber();
        System.out.println("调用nextnumber()方法后:");
        System.out.println("one1.number"+one1.getNumber());
        System.out.println("one2.number"+one2.getNumber());
         
         
        TwoSingleton two1 = TwoSingleton.getInstance();
        TwoSingleton two2 = TwoSingleton.getInstance();
        System.out.println("用twosingleton实现单例模式");
        System.out.println("抵用nextnumber方法之前:");
        System.out.println("two1.number="+two1.getNumber());
        System.out.println("two2.number="+two2.getNumber());
        two1.nextNumber();
        System.out.println("调用nextnumber方法后:");
        System.out.println("two1.number="+two1.getNumber());
        System.out.println("two2.number="+two2.getNumber());
    }
}

  

传自:http://www.oschina.net/code/snippet_1993928_43925

单例模式--两种方式

标签:blog   http   io   ar   os   使用   java   on   div   

原文地址:http://www.cnblogs.com/zh-bo/p/4110034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!