单例模式:饿汉模式
正文开始@Assassin
1. 什么是设计模式?
- 设计模式是静态方法和属性的经典应用
- 设计模式是在大量的实践中总结和理论化之后的优选的代码结构,编程风格以及解决问题的思考方式。设计模式可以想象成经典的棋谱,面对不同的棋局,我们便用不同的棋谱,省去了我们自己再去思考和摸索的过程
简而言之,就是面对一些相同的类似的场景我们可以用一些总结出来的惯用套路去解决问题,这大大地提高了我们的效率,这种策略在编程中就称为模式,一些比较经典的实用的模式便叫做设计模式。在Java
编程中有常见的23种设计模式,如观察者模式,工厂模式,适配器模式,代理模式,模板模式等,这里介绍单例模式中的饿汉模式。
2. 单例设计模式:
2.1 什么是单例模式?
顾名思义,所谓单例模式就是只有单个的实例。
- 类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个可以取得该对象实例的方法
- 单例模式有两种方法:1. 饿汉模式 2. 懒汉模式
单例模式有什么用呢?在实际的网站开发或软件开发中,有一个类是很有重量级的核心类,它非常地耗用资源,但实际上我们只需要一个,那么这个时候单例模式就会显得很有价值。
2.2 单例模式应用实例:
下面演示饿汉模式的具体实现,步骤如下:
- 构造方法(构造器)私有化
- 在类的内部创建对象,这个对象需修饰成
static
- 向外提供一个静态的公共方法
具体实现如下:
package com.haut.iot.assassin;
//有一个类是GirlFriend
//假如你只能有一个女朋友
class GirlFriend {
private String name; //姓名
//如何保障我们只能创建一个GirlFriend对象?
//[单例模式 -> 饿汉模式]
//1. 构造器私有化
//2. 在类的内部创建对象(该对象需是static)
//3. 向外提供一个静态的公共方法
private static GirlFriend gf = new GirlFriend("王祖贤");//私有对象
//为了在getInstance()返回gf,需将该方法修饰为static
public static GirlFriend getInstance() {
return GirlFriend.gf; //返回gf
}
private GirlFriend(String name) { //构造器
this.name = name;
}
@Override
public String toString() { //重写toString()
return "GirlFriend{" +
"name='" + name + '\'' +
'}';
}
}
public class SingleTon {
public static void main(String[] args) {
//两个对象时同一个对象(静态的对象)
GirlFriend instance1 = GirlFriend.getInstance();
System.out.println(instance1);
GirlFriend instance2 = GirlFriend.getInstance();
System.out.println(instance2);
//true
System.out.println(instance1 == instance2);
}
}
运行结果:
下面具体解释一哈~~
我们的需求是只能有一个实例化对象,这个时候的解决方法是把构造器设计成private
,防止在类外直接创建对象。这个时候问题又来了,仔细想一下,当把构造方法修饰为private
后,我们根本得不到实例化对象了,这时候就有点矫枉过正内味了(我们本来是只要一个实例化对象,但这样连一个对象都不能实例化了)
对应的解决方法是在本类中创建一个private
的static
对象,再提供一个公共的静态方法getInstance()
获取该对象。这个getInstance()
方法为什么要修饰成static
呢?因为我们的本意就是不想通过创建对象来实例化对象,所以修饰成static
就意味着可以直接通过类名来调用。这个时候反过来看,对象的引用gf
也就应该相应地被修饰为static
,因为静态方法不能调用非静态的方法或属性。如下:
具体的涉及到静态方法或属性的类加载机制这里就不再展开。
多谈两句:为啥这个设计模式要被叫做饿汉模式呢?
只要类被加载,此对象gf
就会被创建,即使不使用gf
,它也会被创建,这是类的加载机制:只要调用了静态方法或属性,该方法或属性所在的类就会被加载,类加载之后便会首先初始化静态属性和静态代码块。
举个俗点的例子,就说你还没跟gf
相处很久,你俩还没来得及相互了解它便成了你的女朋友,也就是操之过急,像个饥饿的汉子一样,这便是饿汉模式的通俗理解。