1008
技術社區[雲棲]
Java 25天基礎-DAY 06-麵向對象-單例模式
/*
設計模式:解決某一類問題最行之有效的方法
Java中23種設計模式:
單例設計模式:解決一個類在內存中值存在一個對象
想要保證對象唯一
1、為了避免其他程序過多建立該類對象,先禁止其他程序建立該類對象
2、為了讓其他程序可以訪問到該類對象,隻好在本類中,自定義一個對象。
3、為了方便其他程序對自定義對象的訪問,可以對外提供一些訪問方式。
這三步怎麼用代碼體現呢?
1、將構造函數私有化
2、在類中創鍵一個本類對象
3、給創建的對象提供一個訪問該對象的方式
對於事物該怎麼描述還怎麼描述,當需要將該事物的對象保證在內存中唯一時,將以上的三步加上即可。
*/
class Single
{
private int num;
public void setNum (int num)
{
this.num = num;
}
public int getNum()
{
return num;
}
private Single(){}
private static Single s = new Single();
//因為s變量不需要外部直接訪問,所以私有化,因為下麵的靜態函數需要調用該對象,所以也將其靜態。
public static Single getInstance()
//因為不能創建對象,需要使用類名訪問,所以使用靜態函數。
{
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
s1.setNum(32);
System.out.println(s2.getNum());
//s2的值和s1的值相同證明調用的是同一個對象。
}
}
/*
class Single
{
private static Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
餓漢式:
對象先初始化。
*/
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if (s==null)
{
s= new Single();
return s;
}
}
//懶漢式,對象被調用時才初始化。也叫做延時加載。
}
//定義單類時使用餓漢式
class 單例模式
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
class Single
{
private static Single s = null;
private Single(){}
public static synchronized Single getInstance()
{
if (s==null)
{
-->A
s= new Single();
return s;
}
}
}//加入synchronized後會造成程序低效,因為當B遇到synchronized就不會進入。
最後更新:2017-10-13 23:04:36