一:設計模式
- java設計模式有23種
- 設計模式是一種思想,是解決問題行之有效的方式
二:單例設計模型
-
解決問題
-保證一個類中的對象的唯一性
-對於多個程序使用同一個配置信息對象時,就必須保證對象的唯一性 -
如何保證唯一性?
-不允許其他程序使用new創建該類對象
-在該類中創建一個本類實例
-對外提供一個方法可以讓其他程序去獲取該類對象 -
步驟
-私有化該類構造函數
-通過new在本類中創建一個本類對象
-定義一個公有方法,將創建對象返回
三:單例設計模式例題
/**
*author
*/
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}
class SingleDemo{
public static void main(String [] args){
Single s1 =Single.getInstance();
Single s2 =Single.getInstance();
System.out.println(s1==s2);
//Single ss =Single.s;
Test t1=new Test();
Test t2=new Test();
t1.setNum(10);
t2.setNum(20);
System.out.println(t1.getNum());
System.out.println(t2.getNum());
}
}
class Test {
private int num;
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
}
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}
class SingleDemo2{
public static void main(String [] args){
Single s1 =Single.getInstance();
Single s2 =Single.getInstance();
System.out.println(s1==s2);
//Single ss =Single.s;
//Test t1=new Test();
//Test t2=new Test();
Test t1=Test.getInstance();
Test t2=Test.getInstance();
t1.setNum(10);
t2.setNum(20);
System.out.println(t1.getNum());
System.out.println(t2.getNum());
}
}
class Test {
private int num;
private static Test t=new Test();
private Test(){}
private static Test getInstance(){
return t;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
}
-
第一種代碼輸出值都會輸出
-
第二種代碼增加了下面代碼,就會更新新的值覆蓋前面的值
private static Test t=new Test();
private Test(){}
private static Test getInstance(){
return t;
}
四:餓漢式 與 懶漢式
-
餓漢式
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
} -
懶漢式
class Single2{
//類加載進來,沒有對象,只調用getInstance方法時,纔會創建對象
//延遲加載形式
private satatic Ssingle2 s=null;
private Single2(){
public static Single2 getInstance(){
if(s==null)
s=new Single2();
return s;
}
}
}