GARA
博闻强记 多思多问 取法乎上 持之以恒

 

 

  • 简单方式:

package com.gara.singleton;

import java.awt.event.MouseWheelEvent;

/**
 * 单例模式一:
 *         简单的方式:在并发执行时可能存在多个实例
 * @author Administrator
 *
 */
public class SingletonDemo1 {
    
    private static SingletonDemo1 INSTANCE;
    
    private SingletonDemo1() { }
    
    public static SingletonDemo1 getInstance(){
        if (INSTANCE == null) {
            INSTANCE = new SingletonDemo1();
        }
        return INSTANCE;
    }
}

 

  • 公共域方式

package com.gara.singleton;
/**
 * 单例模式2:
 *         公共域方式:返回时无法进行逻辑处理
 * @author Administrator
 *
 */
public class SingletonDemo2 {
    
    public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
    
    private SingletonDemo2(){ }
}

 

  • 工厂化方式

package com.gara.singleton;
/**
 * 单例模式3:
 *         工厂化方式:可以在实例过程中添加逻辑
 * @author Administrator
 *
 */
public class SingletonDemo3 {
    
    public static final SingletonDemo3 INSTANCE = new SingletonDemo3();
    
    private SingletonDemo3(){ }
    
    public static SingletonDemo3 getInstance(){
        return INSTANCE;
    }
}
  • 枚举类方式

package com.gara.singleton;

/**
 * 单例模式4:
 *         枚举类方式:
 *             优点: 1.简洁优化
 *                  2.不存在多个实例的问题
 *                  3.不存在反序列化的问题
 * @author Administrator
 *
 */
public enum SingletonDemo4 {
    
    INSTANCE;
    
    public static void sayHello(String name){
        System.out.println("hello "+name);
    }
    
}
  • 静态内部类方式
/**
 * 懒汉试(静态内部类)
 * 优点:结局性能问题和安全问题
 * 极简模式下的最经典代码设计
 */
public class SingletonDemo5 {

    /**
     * 1.申明一个静态内部类
     * private :私有化保证不被修改
     * static : 保证全局唯一
     * final : 防止内部操作
     */
    private static class LazyHolder {
        private static final SingletonDemo5 INSTANCE = new SingletonDemo5();
    }

    // 2. 构造方法私有化
    // 如果不私有化,会有一个模式的无参构造,就意味着代码随时可以new出来!!!
    private SingletonDemo5() {
    }

    /**
     * 3. 提供静态方法获取实例
     * final: 确保别人不能覆盖
     */
    public static final SingletonDemo5 getInstance() {
        return LazyHolder.INSTANCE;
    }
}

 

  • 测试
package com.gara.singleton;

public class SingletonTest {
    
    public static void main(String[] args) {
        
        System.out.println("SingletonDemo1:"+SingletonDemo1.getInstance());
        System.out.println("SingletonDemo1:"+SingletonDemo1.getInstance());
        
        System.out.println("SingletonDemo2:"+SingletonDemo2.INSTANCE);
        System.out.println("SingletonDemo2:"+SingletonDemo2.INSTANCE);
        
        System.out.println("SingletonDemo3:"+SingletonDemo3.getInstance());
        System.out.println("SingletonDemo3:"+SingletonDemo3.getInstance());
        
        System.out.println("SingletonDemo4:"+SingletonDemo4.INSTANCE);
        System.out.println("SingletonDemo4:"+SingletonDemo4.INSTANCE);
     System.out.println("SingletonDemo3:"+SingletonDemo5.getInstance());
        System.out.println("SingletonDemo3:"+SingletonDemo5.getInstance());
     SingletonDemo4.INSTANCE.sayHello("LiuLiu"); } }

输出结果:

SingletonDemo1:com.gara.singleton.SingletonDemo1@139a55
SingletonDemo1:com.gara.singleton.SingletonDemo1@139a55
SingletonDemo2:com.gara.singleton.SingletonDemo2@1db9742
SingletonDemo2:com.gara.singleton.SingletonDemo2@1db9742
SingletonDemo3:com.gara.singleton.SingletonDemo3@106d69c
SingletonDemo3:com.gara.singleton.SingletonDemo3@106d69c
SingletonDemo4:INSTANCE
SingletonDemo4:INSTANCE

SingletonDemo3:com.gara.singleton.SingletonDemo3@eed1f14
SingletonDemo3:com.gara.singleton.SingletonDemo3@eed1f14
hello LiuLiu



posted on 2016-09-09 16:40  GaraYing  阅读(125)  评论(0编辑  收藏  举报