单例模式的优点:
只生成一个实例,减少了系统内存的开销
单例的饿汉式实现
优点:多线程时是线程安全的
缺点:对象加载时间过长
1 /*单例设计模式 某个类只能存在一个对象实例 2 1.私有化类的构造器 3 2.内部创建类的静态的对象 4 3.提供类的静态的方法 5 */ 6 public class test { 7 public static void main(String[] args) 8 { 9 Bank bank1=Bank.getInstance(); 10 Bank bank2=Bank.getInstance(); 11 System.out.println(bank1==bank2);//true 12 } 13 14 } 15 16 class Bank 17 { 18 //私有化类的构造器 19 private Bank() 20 { 21 22 } 23 //内部创建类的对象,对象也必须是静态的 24 private static Bank instance=new Bank(); 25 //提供公共的静态的方法,返回类的对象 26 public static Bank getInstance() 27 {//建立对象需要类的构造器,但是被私有了,调用类返回对象的方法企图得到对象,但是需要先建立对象 28 //这里将方法变成静态,就可以通过类直接调用 29 return instance;//静态的方法只能调用静态的结构,所以创建的对象需为静态 30 } 31 }
单例的懒汉式实现
优点:延迟对象的加载
缺点:目前的写法是线程不安全的,在多线程情况下需要改进
1 /*单例设计模式 某个类只能存在一个对象实例 2 1.私有化类的构造器 3 2.声明当前类的静态对象,没有初始化 4 3.声明public,static的返回当前类对象的方法 5 */ 6 public class test { 7 public static void main(String[] args) 8 { 9 Order order=Order.getInstance(); 10 } 11 12 } 13 14 class Order 15 { 16 //私有化类的构造器 17 private Order() 18 { 19 20 } 21 //声明当前类对象,没有初始化 22 private static Order instance=null; 23 //声明public,static的返回当前类对象的方法 24 public static Order getInstance() 25 { 26 if(instance==null) 27 instance=new Order(); 28 return instance; 29 } 30 }
两者区别在于:饿汉式的类对象是及时创建的,懒汉式的类对象是需要时再创建的。