单例设计模式设计模式
正常状况下一个类能够建立多个对象安全
1 public static void main(String[] args) { 2 // 正常状况下一个类能够建立多个对象 3 Person p1 = new Person(); 4 Person p2 = new Person(); 5 Person p3 = new Person(); 6 }
1. 单例设计模式的做用多线程
单例模式,是一种经常使用的软件设计模式。经过单例模式能够保证系统中,应用该模式的这个类只有一个实例。即一个 类只有一个对象实例。ide
2. 单例设计模式实现步骤spa
1. 将构造方法私有化,使其不能在类的外部经过new关键字实例化该类对象。线程
2. 在该类内部产生一个惟一的实例化对象,而且将其封装为private static类型的成员变量。设计
3. 定义一个静态方法返回这个惟一对象。code
3. 单例设计模式的类型视频
根据实例化对象的时机单例设计模式又分为如下两种:对象
1. 饿汉单例设计模式
2. 懒汉单例设计模式
4. 饿汉单例设计模式
饿汉单例设计模式就是使用类的时候已经将对象建立完毕,无论之后会不会使用到该实例化对象,先建立了再说。很 着急的样子,故被称为“饿汉模式”。
代码以下:
public class Singleton { // 1.将构造方法私有化,使其不能在类的外部经过new关键字实例化该类对象。 private Singleton() {} // 2.在该类内部产生一个惟一的实例化对象,而且将其封装为private static类型的成员变量。 private static final Singleton instance = new Singleton(); // 3.定义一个静态方法返回这个惟一对象。 public static Singleton getInstance() { return instance; } }
5. 懒汉单例设计模式
懒汉单例设计模式就是调用getInstance()方法时实例才被建立,先不急着实例化出对象,等要用的时候才例化出对 象。不着急,故称为“懒汉模式”。
public static void main(String[] args) { // 正常状况下一个类能够建立多个对象 Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person(); } public class Singleton { // 1.将构造方法私有化,使其不能在类的外部经过new关键字实例化该类对象。 private Singleton() {} // 2.在该类内部产生一个惟一的实例化对象,而且将其封装为private static类型的成员变量。 private static final Singleton instance = new Singleton(); // 3.定义一个静态方法返回这个惟一对象。 public static Singleton getInstance() { return instance; } }
6. 小结
单例模式能够保证系统中一个类只有一个对象实例。
实现单例模式的步骤:
1. 将构造方法私有化,使其不能在类的外部经过new关键字实例化该类对象。
2. 在该类内部产生一个惟一的实例化对象,而且将其封装为private static类型的成员变量。
3. 定义一个静态方法返回这个惟一对象。
7. 示例代码:
// 定义音乐播放器单例(饿汉式) class AudioPlayer { // 1.将构造方法私有 private AudioPlayer() { } // static的成员变量是在类加载的时候就会建立好(早) // 2.本类本身建立一个对象,使用静态的成员变量来保存 private static AudioPlayer player = new AudioPlayer(); // 3.提供一个方法,返回这个惟一的对象给别人使用 public static AudioPlayer getInstance() { return player; } } // 视频播放器(懒汉式) class VideoPlayer { // 1.将构造方法私有 private VideoPlayer() { } // 2.本类本身建立一个对象,使用静态的成员变量来保存 private static VideoPlayer player; // 3.提供一个方法,返回这个惟一的对象给别人使用 public static VideoPlayer getInstance() { // 若是对象尚未值 if (player == null) { // 就建立一个对象 player = new VideoPlayer(); } // 懒汉式存在线程安全问题.后面会学多线程,会解决线程安全问题 return player; } } public class Demo { public static void main(String[] args) { AudioPlayer a1 = AudioPlayer.getInstance(); AudioPlayer a2 = AudioPlayer.getInstance(); AudioPlayer a3 = AudioPlayer.getInstance(); System.out.println("a1 = " + a1); System.out.println("a2 = " + a2); System.out.println("a3 = " + a3); // 视频播放器(懒汉式) VideoPlayer vp1 = VideoPlayer.getInstance(); VideoPlayer vp2 = VideoPlayer.getInstance(); VideoPlayer vp3 = VideoPlayer.getInstance(); System.out.println("vp1 = " + vp1); System.out.println("vp2 = " + vp2); System.out.println("vp3 = " + vp3); } }