懒汉式+单例模式
package com.fgy.entity;
/**
* 懒汉+单例模式
*
* 懒汉模式:
* 程序启动时不创建实例,等到需要时再创建
*
* 单例模式三要素:
* 1.构造方法私有化->使得外部无法通过new实例化对象
* 2.静态属性指向实例
* 3.静态方法返回第2点的静态属性
*
* @author fgy_
*
*/
public class AppleSloth {
//私有化构造方法
private AppleSloth() {
System.out.println("实例化了一个Apple");
}
//静态属性指向实例
private static AppleSloth apple;
//静态方法返回Apple实例
public static AppleSloth getInstance()
{
//保证该类只有一个实例
if(null!=apple) {
return apple;
}else
{
apple = new AppleSloth();
return apple;
}
}
}
测试:
package com.fgy.test;
import com.fgy.entity.AppleSloth;
import com.fgy.entity.BananaHungry;
public class FruitTest {
public static void main(String[] args) {
AppleSloth apple1 = AppleSloth.getInstance();
AppleSloth apple2 = AppleSloth.getInstance();
System.out.println("饿汉式:apple1==apple2 "+(apple1==apple2));
/*
* BananaHungry bananaHungry1 = BananaHungry.getInstance();
*
* BananaHungry bananaHungry2 = BananaHungry.getInstance();
*
* System.out.println("懒汉式:bananaHungry1==bananaHungry2 "+(bananaHungry1==
* bananaHungry2));
*/
}
}
结果:两次获取实例,只创建一个实例
控制台输出:
实例化了一个Apple
饿汉式:apple1==apple2 true
饿汉式+单例模式
package com.fgy.entity;
/**
* 饿汉式+单例模式
*
* 饿汉模式:
* 程序启动时就创建实例,不管是否需要
*
* 单例模式三要素
* 1.构造方法私有化
* 2.声明类唯一实例,private static修饰
* 3.提供获取实例的公有、静态的方法
* @author fgy_
*
*/
public class BananaHungry {
private static BananaHungry bananaHungry = new BananaHungry();
private BananaHungry() {
System.out.println("实例化了一个Banana");
}
public static BananaHungry getInstance()
{
return bananaHungry;
}
}
测试:
package com.fgy.test;
import com.fgy.entity.AppleSloth;
import com.fgy.entity.BananaHungry;
public class FruitTest {
public static void main(String[] args) {
/*
* AppleSloth apple1 = AppleSloth.getInstance();
*
* AppleSloth apple2 = AppleSloth.getInstance();
*
* System.out.println("饿汉式:apple1==apple2 " + (apple1 == apple2));
*/
BananaHungry bananaHungry1 = BananaHungry.getInstance();
BananaHungry bananaHungry2 = BananaHungry.getInstance();
System.out.println("懒汉式:bananaHungry1==bananaHungry2 "+(bananaHungry1==bananaHungry2));
}
}
结果:
两次获取的实例是同一个,只调用一次构造方法
控制台输出:
实例化了一个Banana懒汉式: bananaHungry1==bananaHungry2 true
线程安全
懒汉式单例模式时非线程安全的,使用时需注意。