饿汉式;
/**
* 单例设计模式之饿汉式
* 实现;
* 1 定义一个私有的构造方法
* 2 提供一个本类的对象的引用(静态)
* 3 提供一个获取本类对象的引用的方法
* 特点;
* 在实例声明时就创建对象,生命周期长,占内存长,调用时效率高
*/
public class Singleton01 {
private static Singleton01 instance=new Singleton01();
private Singleton01(){}
public static Singleton01 getInstance(){
return instance;
}
public void print(){
System.out.println("这是饿汉式");
}
}
懒汉式;
/**
* 设计模式之懒汉式
* 实现;
* 1 定义一个私有的构造方法
* 2 提供一个本类的对象的引用(静态)
* 3 提供一个获取本类对象的引用的方法
*特点;
* 生命周期短,占用内存时间短,第一次调用效率低(懒加载)
* 通常我们在项目中采用懒汉式实现方案,就是在什么时候用,什么时候创建,缩短对象的生命周期
* 那在什么情况下要用单例模式?
* 1、工具类中,只有方法,没有属性(属性跟对象相关)
* 2、会被频繁使用
*
* 目的是为了节省频繁的创建对象而对内存的消耗,从而提高效率
* 创建对象也会消耗性能
*/
public class Singleton02 {
private static Singleton02 instance;
private Singleton02(){}
public static Singleton02 getInstance(){
if(instance==null){
instance=new Singleton02();
}
return instance;
}
public void print(){
System.out.println("这是懒汉式");
}
}
测试类;
/*
测试类
*/
public class SingletonTest {
public static void main(String[] args) {
Singleton01 s1=Singleton01.getInstance();
s1.print();
Singleton02 s2=Singleton02.getInstance();
s2.print();
}
}
问:能不能用静态方法+构造私有化来代替单例?
答:使用单例模式的好处是:我们可以充分利用面向对象的特性:继承,多态,重写这些都可以实现
而静态方法不依赖对象,因此,虽然可以继承,但不能重写,也无法实现多态。