设计模式&单例
设计模式(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; } }
所以正常开发的时候还是使用饿汉式比较好--会浪费一丢丢的内存
单例模式使用的时候要小心。之前同事将一个交易的类写成了单例,结果发现库里面所有交易员的单子都是同一个交易员下的单。