java單例設計模式
單例設計模式:一個類只允許有一個物件,建立一個全域性的訪問點,將他提供出去供大家使用.
package com.qianfeng.test;
/*
* 設計模式:將前人總結好的經驗我們直接拿來使用.
* 一共有23種,常用的有單例設計模式,模板設計模式,工廠設計模式,裝飾設計模式,介面卡設計模式,代理設計模式.
*
* 單例設計模式:一個類只允許有一個物件,建立一個全域性的訪問點,將他提供出去供大家使用.
* 分析:
* 1.使用者只允許有一個物件
* 2.單例類
* 3.全域性的訪問點:得到的唯一的物件就是全域性的訪問點,怎麼做到全域性?—static
* 4.提供出去?
* 5.供大家使用?—單例的功能,通過給單例類新增成員實現
*
* * 單例類的作用:1.可以實現兩個物件之間的傳值
* 2.可以在全域性範圍內呼叫很多的功能.
* 好處:可以讓兩個物件在完全沒有關係的前提下,實現值的傳遞,降低了耦合性,提高了內聚性
*
* 耦合性,內聚性在微觀上說:描述的是類與類之間的關係
* 好處:我們應該儘量提高內聚性,減少耦合性,可以提高程式的健壯性,增加程式碼的可移植性,方便實現模組兒化程式設計
*
* 如何做到低耦合高內聚?
* 在處理類與類關係的時候,讓類之間的關係越緊密耦合性越高,內聚性越低.反之,關係越鬆散耦合性越低,內聚性越高.
*/
//單例類
//餓漢式:在定義變數的同時完成賦值
class SingleInstance {
// 第二步:在單例類的內部建立當前類的物件,私有化並變成靜態的
private static SingleInstance singleInstance = new SingleInstance();
// 第一步:將構造方法私有化
private SingleInstance() {
}
// 第三步:建立一個靜態的公共的方法,將單例類物件提供出去
public static SingleInstance getInstance() {
return singleInstance;
}
// 功能區---一般建立的是非靜態的成員實現功能
// 建立成員變數
// 建立成員方法
}
// 單例類
// 懶漢式:開始只是定義變數,什麼時候使用,什麼時候賦值
class SingleInstance1 {
// 第二步:在單例類的內部建立當前類的物件,私有化並變成靜態的
private static SingleInstance1 singleInstance = null;
// 第一步:將構造方法私有化
private SingleInstance1() {
}
// 第三步:建立一個靜態的公共的方法,將單例類物件提供出去
public static SingleInstance1 getInstance() {
if (singleInstance == null) {// 為了保證物件的唯一性
singleInstance = new SingleInstance1();
}
return singleInstance;
}
// 功能區---一般建立的是非靜態的成員實現功能
// 建立成員變數
// 建立成員方法
int num;
}
// 例項:有兩個類A,B.要求將A中的值傳到B類中
class A {
int num1;
// 通過單例傳值
public void danLiTest1() {
SingleInstance1 singleInstance1 = SingleInstance1.getInstance();
singleInstance1.num = num1;
}
}
class B {
int num2;
// 通過傳參實現傳值
public void chanCanTest(A a) {
num2 = a.num1;
}
// 通過單例傳值
public void danLiTest2() {
SingleInstance1 singleInstance1 = SingleInstance1.getInstance();
num2 = singleInstance1.num;
}
}
public class Demo5 {
public static void main(String[] args) {
// SingleInstance singleInstance1 = new SingleInstance();
// SingleInstance singleInstance2 = new SingleInstance();
// System.out.println(singleInstance1 == singleInstance2);// false
// 使用單例
SingleInstance singleInstance1 = SingleInstance.getInstance();
SingleInstance singleInstance2 = SingleInstance.getInstance();
System.out.println(singleInstance1 == singleInstance2);// true
// 要求將A中的值傳到B類中
A a = new A();
B b = new B();
a.num1 = 4;
// 傳值第一種方法:直接傳值
// 不可取,一般成員變數都是私有的
b.num2 = a.num1;
// 第二種方式:傳參,讓A類與B類之間產生了關係.
b.chanCanTest(a);
// 第三種方式:通過單例傳值,讓A類與B類之間是獨立的
a.danLiTest1();
b.danLiTest2();
}
}
Runtime:執行時類
package com.qianfeng.test;
/*
* Runtime:執行時類:
*
* 每個java應用程式都有一個runtime類例項,使應用程式能夠與其執行的環境相連線。
* 可以通過getRuntime方法獲取當前執行時。
*
* 應用程式不能建立自己的runtime類例項。
*/
public class Demo6 {
public static void main(String[] args) {
// 獲取單例類物件
Runtime runtime = Runtime.getRuntime();
// 單位預設是位元組
System.out.println(runtime.freeMemory() / 1024. / 1024.);// 剩餘的/空閒的記憶體量
System.out.println(runtime.maxMemory() / 1024. / 1024.);// 可以使用的最大的記憶體量
System.out.println(runtime.totalMemory() / 1024. / 1024.);// 已經使用的記憶體量
}
}
相關文章
- Java設計模式-單例模式Java設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java常用設計模式-單例模式Java設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- Java設計模式之單例模式Java設計模式單例
- Java設計模式系列之單例設計模式Java設計模式單例
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- java設計模式其一 單例模式Java設計模式單例
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- 折騰Java設計模式之單例模式Java設計模式單例
- [java設計模式]破解單例設計模式,禁止偷生、超生!Java設計模式單例
- 設計模式 單例模式設計模式單例
- 設計模式——單例模式設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式-單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式(單例模式)設計模式單例
- 直播軟體搭建,Java設計模式單例模式Java設計模式單例
- java23種設計模式—— 二、單例模式Java設計模式單例
- 設計模式之單例設計模式設計模式單例
- 單例設計模式單例設計模式
- [java設計模式]單例設計模式,程式也要進行計劃生育。Java設計模式單例
- Java設計模式學習筆記(五) 單例模式Java設計模式筆記單例
- 設計模式:單例模式的使用和實現(JAVA)設計模式單例Java
- Java進階篇設計模式之一 —– 單例模式Java設計模式單例
- Java進階篇設計模式之一 ----- 單例模式Java設計模式單例
- Java - 反射機制與單例設計模式Java反射單例設計模式
- 設計模式之單例模式設計模式單例
- 常用設計模式-單例模式設計模式單例
- 設計模式之---單例模式設計模式單例
- 設計模式(二)——單例模式設計模式單例
- 001設計模式:單例模式設計模式單例
- # Python設計模式 單例模式Python設計模式單例
- 設計模式一(單例模式)設計模式單例