单例设计模式(Singleton),就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的
举例 : 有1个类Customer , 要求该类只能有1个对象
思路 : 1. 构造器静态私有化( 外部无法访问 , 无法在类外部创造对象 )
2. 在Customer内部创建1个对象 , 修饰符为private static
3. 创建1个公共的静态方法 , 用于返回该对象
1 . 饿汉模式
package com.woniuxy.pratice1; //饿汉式 先创建单例对象 public class Bank { private String name; //私有化构造方法,类外部无法创造对象 private Bank(String name) { this.name = name; } //在类李创造一个私有化静态的对象bank(同时也是该类唯一的一个对象) private static Bank bank = new Bank("中国银行"); //提供公共的静态方法,返回唯一的对象 public static Bank getBank() { return bank; } public void deposit() { System.out.println("在"+this.name+"存钱"); } }
2. 懒汉模式
package com.woniuxy.pratice1; //懒汉式 public class Home { //私有化构造器,类外部无法创建对象 private Home() { } //先声明1个私有的静态对象h,外部无法访问 private static Home h; //提供公共的静态方法获取唯一对象h public static Home getHome() { //如果第一次调用本方法,h为空则创建对象并赋值给h if (h == null) { h = new Home(); } return h; } }