Java的設計模式以及抽象和介面的概念
阿新 • • 發佈:2019-02-11
單例設計模式(單例項)
核心:在程式運行當中,無論你怎麼建立該物件,該物件有且只有一個存在
單例傳值
寫單例物件思路:
1.物件不能讓使用者來建立(不能在本類以外建立)
2.物件應該在類的內部來建立
3.開放一個讓使用者在類外面,能拿到物件的方法
分為餓漢式和懶漢式單例
餓漢式單例:不管使用不使用開放的方法,都會將這個單例物件創建出來
懶漢式單例(雙鎖):只有第一次呼叫開放的方法,單例物件才會創建出來(延遲建立)
區別:建立單例物件的時機不同
餓漢式例子
// 餓漢式 class SingleE{ // 自己建立物件 private static SingleE singleE = new SingleE(); // 構造方法私有化 private SingleE() { } // 開放一個方法 讓外界能拿到物件 // 外界不可能創建出物件 來呼叫成員方法 // 所以要使用靜態方法 public static SingleE getInstance() { return singleE; }
懶漢式例子
// 不完整的懶漢式單例(出現執行緒問題) class SingleL{ // 宣告一個本類物件的引用 private static SingleL singleL = null; // 私有化構造方法 private SingleL() { } // 開放訪問的方法 public static SingleL getInstance() { // 判斷 if (singleL == null) { // 建立物件 singleL = new SingleL(); } // 直接返回物件 return singleL; }
}
抽象
- 抽象:不知道該怎麼具體描述該事物
- 關鍵詞:abstract
- 修飾類 抽象類
- 修飾方法 抽象方法
注意:
- 1.抽象方法 沒有實現部分
- 2.抽象方法 必須在抽象類中 才能宣告
- 3.抽象類中 可以沒有抽象方法
- 4.抽象類 不能直接建立物件 可以使用多型的形式建立物件
- 5.繼承抽象類 子類必須實現 抽象類中的抽象方法
抽象類中可以有
- 1.常量 變數
- 2.抽象方法
- 3.成員方法
- 4.構造方法
思考
1.抽象類能不能建立物件?
答:不能
2.抽象類有沒有構造方法?
答:有
3.抽象類該如何使用?
例項:
public static void main(String[] args) { Animal animal = new Cat(); animal.eat(); // 向下轉型 Cat cat = (Cat)animal; cat.zLs(); } } abstract class Animal{ // 宣告抽象方法吃 public abstract void eat(); public Animal() { } } class Cat extends Animal{ // 實現抽象方法 public void eat() { System.out.println("貓吃魚"); } public void zLs() { System.out.println("抓老鼠"); } }
注意:abstract 關鍵字不能與哪些關鍵字共存?
- private 修飾抽象方法,子類不能實現,抽象方法沒有意義
- final 修飾成員方法,不能被重寫,抽象方法沒有意義
- static 修飾抽象方法就可以直接使用類名呼叫,但是抽象方法沒有實現部分
模板設計模式
- 當你的程式大部分程式碼都相同,只有少部分需要修改時,可以使用模板設計模式(利用抽象類)
例項
abstract class SuDa{
// 學習
public void study() {
System.out.println("報名繳費");
// 選擇學科
chooseSubject();
System.out.println("找工作");
}
// 抽象方法
public abstract void chooseSubject();
}
class CL extends SuDa{
public void chooseSubject() {
System.out.println("H5");
}
}
class FZM extends SuDa{
public void chooseSubject() {
System.out.println("JAVA");
}
}
介面
狹義:
使用關鍵字 interface 來定義介面
格式: interface 介面名{ }廣義:介面相對於一個規範,需要人來遵守
注意:
- 1.使用介面時,不是用的繼承,需要使用關鍵詞 implements (實現)
- 2.介面類不能直接建立物件
- 3.介面類不能宣告成員方法
- 4.介面類不能宣告構造方法
5.使用多型的方式來建立物件
介面可以寫:
- 1.只能寫抽象方法,並且可以省略 public abstract 兩個關鍵詞
- 2.只能寫靜態常量,並且省略 public static final 三個關鍵詞
謹記:
- 實現類的類名命名,字尾加Impl