閱讀1008 返回首頁    go 技術社區[雲棲]


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

  上一篇:go  CentOS7破解root密碼
  下一篇:go  Java 25天基礎-DAY 06-麵向對象-靜態代碼塊