1. 程式人生 > >Java的設計模式以及抽象和介面的概念

Java的設計模式以及抽象和介面的概念

單例設計模式(單例項)

核心:在程式運行當中,無論你怎麼建立該物件,該物件有且只有一個存在
單例傳值

寫單例物件思路:

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