单例设计模式
单例设计模式:保证类在内存中只有一个对象。
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) : 在单独的线程中执行 指定的字符串命令
竹杖芒鞋轻胜马,一蓑烟雨任平生。
回首向来萧瑟处,也无风雨也无晴。