一步一步學JAVA(9)-設計模式

設計模式:解決問題最行之有效的思想。是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的
總結。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。


java 中有23 種設計模式,這裏介紹兩種:

單例設計模式 
解決的問題:保證一個類在內存中的對象唯一性。
比如:多程序讀取一個配置文件時,建議配置文件封裝成對象。會方便操作其中數據,又要保證多個程序讀到的
是同一個配置文件對象,就需要該配置文件對象在內存中是唯一的。
Runtime()方法就是單例設計模式進行設計的。
如何保證對象唯一性呢?
思想:
1,不讓其他程序創建該類對象。
2,在本類中創建一個本類對象。
3,對外提供方法,讓其他程序獲取這個對象。
步驟:
1,因爲創建對象都需要構造函數初始化,只要將本類中的構造函數私有化,其他程序就無法再創建該類對象;
2,就在類中創建一個本類的對象;
3,定義一個方法,返回該對象,讓其他程序可以通過方法就得到本類對象。(作用:可控)
代碼體現:
1,私有化構造函數;
2,創建私有並靜態的本類對象;
3,定義公有並靜態的方法,返回該對象。
---------------------------------------------
//餓漢式

class Single{
    private Single(){} //私有化構造函數。
    private static Single s = new Single(); //創建私有並靜態的本類對象。
    public static Single getInstance(){ //定義公有並靜態的方法,返回該對象。
        return s;
    }
}


---------------------------------------------
//懶漢式:延遲加載方式。

class Single2{
    private Single2(){}
    private static Single2 s = null;
    public static Single2 getInstance(){
    if(s==null)
        s = new Single2();
        return s;
    }
}


 
模板方法設計模式
解決的問題:當功能內部一部分實現時確定,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子
類去實現。
 

abstract class GetTime{
    public final void getTime(){ //此功能如果不需要複寫,可加final 限定
    long start = System.currentTimeMillis();
    code(); //不確定的功能部分,提取出來,通過抽象方法實現
    long end = System.currentTimeMillis();
    System.out.println("毫秒是:"+(end-start));
}

public abstract void code() {}; //抽象不確定的功能,讓子類複寫實現

class SubDemo extends GetTime {
    public void code(){ //子類複寫功能方法
        for(int y=0; y<1000; y++){
            System.out.println("y");
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章