單例模式
餓漢式三部曲(資源浪費)
1.將構造器私有化
private GirlFriend(String name) {
this.name = name;
}
2.在類的內部直接創建
private static GirlFriend gf = new GirlFriend("紅紅");
3.提供一個static公共方法,回傳gf物件
public static GirlFriend getInstance(){
return gf;
}
總代碼
public class single {
public static void main(String[] args) {
GirlFriend instance = GirlFriend.getInstance();
System.out.println(instance);
}
}
//有一個類,GirlFriend
//只能有一個女朋友
class GirlFriend{
private String name;
//為了能在靜態方法中,回傳gf物件,將其修飾成static
private static GirlFriend gf = new GirlFriend("紅紅");
//只能創建一個GirlFriend的物件
//步驟
//1.將構造器私有化
//2.在類的內部直接創建
//3.提供一個static公共方法,回傳gf物件
private GirlFriend(String name) {
this.name = name;
}
public static GirlFriend getInstance(){
return gf;
}
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
'}';
}
}
懶漢式三部曲(執行緒不安全)
1.構造器私有化
private Cat(String name) {
this.name = name;
}
2.定義一個static靜態屬性物件
private static Cat cat;
3.提供一個public的static方法,可以回傳一個Cat物件
public static Cat getInstance(){
if (cat == null){//如果沒有創建cat物件
cat = new Cat("小可愛");
}
return cat;
}
4.懶漢式,只有用戶使用getInstance時,才回傳cat物件,再次呼叫時,會回傳上次創建的cat物件
總代碼
public class single2 {
public static void main(String[] args) {
Cat instance = Cat.getInstance();
System.out.println(instance);
}
}
//希望程式運行程序中,只能創建一個貓
//使用單例模式
class Cat{
private String name;
private static Cat cat;
//步驟
//1.構造器私有化
//2.定義一個static靜態屬性物件
//3.提供一個public的static方法,可以回傳一個Cat物件
//4.懶漢式,只有用戶使用getInstance時,才回傳cat物件,再次呼叫時,會回傳上次創建的cat物件
//保證單調性
private Cat(String name) {
this.name = name;
}
public static Cat getInstance(){
if (cat == null){//如果沒有創建cat物件
cat = new Cat("小可愛");
}
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/384976.html
標籤:其他
