Java之单例模式
设计模式:是在大量的实践中总结和理论化之后优选的代码结构,编程风格、以及解决问题的思考方式。
1.单例设计模式:对某一个类只能存在一个对象的实例。并且该类中只提供一个取得其对象实例的方法,如果我们要让类在一个虚拟机中只能产生一个对象。我们首先必须将类的构造器的访问权限设置为private,这样,就不能使用new操作符在类的外部产生类的对象,但是在类的内部仍然可以产生该类的对象,因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该对象的变量也必须定义为静态的。
2.如何实现? 使用饿汉式vs懒汉式
①单例模式的饿汉式
/** *单例模式的饿汉式实现代码 */ public class SingletonTest { public static void main(String[] args) { Blank bank1 = Blank.getInstance();//通过类名.方法去调用 Blank bank2 = Blank.getInstance(); System.out.println(bank1==bank2);//返回true,说明在内存中是同一个对象的实例 } } //饿汉式 class Blank{ //1.私有化类的构造器 (目的是为了避免在类的外面去调用该构造器) private Blank(){ } //2.在类的内部去创建类的对象,要求此对象(属性)必须声明为静态的 private static Blank instance = new Blank(); //3.提供公共的静态方法,返回类的对象 public static Blank getInstance(){ return instance; } }
②单例模式的懒汉式
/** * 单例模式的懒汉式实现代码 */ public class SingletionTest2 { public static void main(String[] args) { Order order1 = Order.getInstance(); Order order2 = Order.getInstance(); System.out.println(order1 == order2); } } class Order{ //1.私有化类的构造器 private Order(){ } //2.声明当前类的对象,没有初始化 private static Order instance= null; //3.声明public static的返回当前类对象的方法 public static Order getInstance() { if (instance == null) { return instance = new Order(); } return instance; } }
3.饿汉式vs懒汉式区别
饿汉式是线程安全的 懒汉式目前的写法是线程不安全的 ------优先饿汉式
饿汉式对象加载时间过长 懒汉式延迟对象的创建 ------优先懒汉式

浙公网安备 33010602011771号