單例模式:餓漢模式
正文開始@Assassin
目錄:
- 單例模式:餓漢模式
- 1. 什么是設計模式?
- 2. 單例設計模式:
- 2.1 什么是單例模式?
- 2.2 單例模式應用實體:
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相處很久,你倆還沒來得及相互了解它便成了你的女朋友,也就是操之過急,像個饑餓的漢子一樣,這便是餓漢模式的通俗理解,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345884.html
標籤:其他
上一篇:理解PCAggplot中的美學
