妖碧落

导航

单例设计模式

单例设计模式:保证类在内存中只有一个对象。

  1、 控制类的创建,不让其他类创建本类对象:    private 私有化构造方法

  2、本类中创建本类对象;

  3、提供公共的访问方法

public class demon1_singleton {
    /*
     * 单例设计模式
     */
    public static void main(String[] args) {
        /*Singleton s2 = Singleton.s1;
        Singleton s3 = Singleton.s1;
        
        System.out.println(s2 == s3);*/
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);    //   true    同一个对象
                
    }

}

class Singleton{
    //私有构造方法,其他类不能访问该构造了,即:   其他类不能new 对象了
    private Singleton(){
        
    }
    private static Singleton s = new Singleton();     //  饿汉式
    
    public static Singleton getInstance() {
        return s;
    }
}

 

* 单例写法两种:
    * (1)饿汉式 开发用这种方式。
    * 
            //饿汉式
            class Singleton {
                //1,私有构造函数
                private Singleton(){}
                //2,创建本类对象
                private static Singleton s = new Singleton();
                //3,对外提供公共的访问方法
                public static Singleton getInstance() {
                    return s;
                }
                
                public static void print() {
                    System.out.println("11111111111");
                }
            }
    * (2)懒汉式 面试写这种方式。多线程的问题?      --多线程时  可能会创建多个对象
    * 
            //懒汉式,单例的延迟加载模式
            class Singleton {
                //1,私有构造函数
                private Singleton(){}
                //2,声明一个本类的引用
                private static Singleton s;
                //3,对外提供公共的访问方法
                public static Singleton getInstance() {
                    if(s == null)
                        //线程1,线程2
                        s = new Singleton();
                    return s;
                }
                
                public static void print() {
                    System.out.println("11111111111");
                }
            }
    * (3)第三种格式
    * 
            class Singleton {
                private Singleton() {}
            
                public static final Singleton s = new Singleton();   //final是最终的意思,被final修饰的变量不可以被更改
            }

 

单例模式的应用:

  Runtime 类

      没有构造方法,被私有了

    Runtime r = Runtime.getRuntime() 

    r.exec(str)   :      在单独的线程中执行 指定的字符串命令

 

posted on 2019-08-14 22:35  妖碧落  阅读(106)  评论(0编辑  收藏  举报