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懒汉式区别

饿汉式是线程安全的           懒汉式目前的写法是线程不安全的         ------优先饿汉式

饿汉式对象加载时间过长    懒汉式延迟对象的创建                           ------优先懒汉式

 

posted @ 2021-03-23 23:21  懒惰的咸鱼  阅读(75)  评论(0)    收藏  举报