Java单例模式个人总结(实例变量和类变量)
生活随笔
收集整理的這篇文章主要介紹了
Java单例模式个人总结(实例变量和类变量)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java單例模式
-
背景知識:Static關鍵字。
-
在對于定義類的變量,分為兩種,是否具有static修飾的變量;
- 沒有static修飾的變量,通過類的實例化(對象)引用,改變量稱為實例變量;
- 使用static修飾的變量稱之為類變量(也稱之靜態變量),類變量不通過類的實例化來引用,可類名直接引用;
-
二者區別:
- 實例變量: JVM為每個新創建的對象分配獨立的內存空間;
- 類變量: 是所有對象共有的;
-
引用方式:
- 實例變量: 對象名.變量名
- 類變量: 類名.變量名
-
使用類變量的優點:減少開辟新的內存空間,直接引用固有變量。
-
本概念也可以引入至實例方法和類方法;
-
定義:該類只有一個實例,并且自行實例化向整個系統提供該實例;(由如一個國家只有一個皇帝,并只能指定某個人為皇帝);
-
單例模式是應用最廣泛的模式之一:
-
作用:單例模式可以避免系統創建過多對象,從而減少過多資源消耗;
-
適用場景:
- 該系統資源只具有該類一個實例化對象:例如改家公司只具有一個打印機;
- 創建一個對象,需消耗的資源過多的情況下,可以使用單例模式。(例:訪問IO和數據庫連接池建立);
-
注意點:
- 構造方法不對外開放,一般為Private;
- 單例模式的構造函數私有化,使得客戶端代碼無法以New 的方式實例化該類對象,只會暴露一個公有化靜態方法;
例:
Person person = new Person();
Connection connection = DruidUtils.getConnection();
案例參考
懶漢模式
- 特點:當使用時才進行實例化,采用以時間換空間的方式;
- 優點:一定程度上節約資源;
- 缺點:第一次加載時才進行實例化,反應慢;
餓漢模式
- 特點:調用時,即進行類的實例化,采用以空間換時間的方式;
代碼參考:將單例模式與計算正方形面積結合在一起;
- AreaHunger:
package singleinstance;public class AreaHunger {// Create an instance directly.private static AreaHunger instance = new AreaHunger();// Private constructor. Can't visit it from outside's class.private AreaHunger() {}// Return an instance directly.public static AreaHunger getInstance() {return instance;}// Caculate the square area.public static UserTest getHunger(int x) {System.out.println("The square area are " + (x*x));return null;}}
- AreaLazy:
package singleinstance;public class AreaLazy {// In inner to create an instance.private static AreaLazy instance = null;// Private constructor. Can't visit it from outside's class.private AreaLazy() {}// Provide a public static method to visit from outside.public static AreaLazy getInstance() {if(instance == null) {return new AreaLazy();}return new AreaLazy();}// Caculate the square's area.public static UserTest getSquareArea(int x) {System.out.println("The square are are " + (x*x));return null;}}
- UserTest(用于測試):
public class UserTest {public static void main(String[] args) {// TODO Auto-generated method stubUserTest manOne = AreaLazy.getSquareArea(4);UserTest manTwo = AreaHunger.getHunger(8);}}
- Console:(控制臺運行結果)
The square are are 16The square area are 64
總結
以上是生活随笔為你收集整理的Java单例模式个人总结(实例变量和类变量)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Druid数据库连接池使用参考
- 下一篇: Spring Data JPA 五分钟快