单例设计模式(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;
}
}