首页 > 技术文章 > 设计模式&单例

ysmdbk 2019-08-29 13:56 原文

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。现在设计模式已经有40多种这里举几个比较常用的

单例模式:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。单例模式是设计模式中最简单的模式之一。通常,普通类的构造函数是公有的,外部类可以通过“new 构造函数()”来生成多个实例。但是,如果将类的构造函数设为私有的,外部类就无法调用该构造函数,也就无法生成多个实例。这时该类自身必须定义一个静态私有实例,并向外提供一个静态的公有函数用于创建或获取该静态私有实例。所以单例模式的核心就是构造方法私有化

单例模式有两种实现方式:

  1、饿汉式  

        class Student
        {
            private Student(){}

            private static final Student s = new Student();

            public static Student getInstance()
            {
                return s;
            }
        }

  2、懒汉式

        class Student
        {
            private Student(){}

            private static final Student s = null;

            public static Student getInstance()
            {
                if(s==null)
                {
                    s = new Student();
                }
                return s;
            }
        }

懒汉式和饿汉式的区别:饿汉式是类一加载进内存就创建好了对象;懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。

懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题

可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。

public class Student {  
    private static Student instance;  
    private Student (){}  
    public static synchronized Student getInstance() {  
    if (instance == null) {  
        instance = new Student();  
    }  
    return instance;  
    }  
}

所以正常开发的时候还是使用饿汉式比较好--会浪费一丢丢的内存

单例模式使用的时候要小心。之前同事将一个交易的类写成了单例,结果发现库里面所有交易员的单子都是同一个交易员下的单。

 

推荐阅读