1. 程式人生 > >Java三種設計模式

Java三種設計模式

Java設計模式
1,靜態工廠方法模式
提供一個工廠類,構造方法私有,不允許外界直接建立該工廠類的物件.
在工廠類中新增一個靜態方法,用於建立物件並返回.
缺點:不利於後期維護
如果後期要再建立類,還要再建立類並在靜態工廠類中新增新的功能.
/**
* 動物的工廠類
* @author Apple
*/
public class AnimalFactory {

//私有功能
private AnimalFactory(){

}
//工廠改進:提供貓和狗這兩種動物
public static Animal createAnimal(String type){
    if("dog".equals(type)){
        return new Dog() ;  
    }else if("cat".equals(type)){
        return new Cat() ;
    }else {
        return null ;
    }
}

}
2,工廠方法模式
需要提供抽象類,具體的類,一個工廠介面,以及具體的類的工廠類實現工廠介面.
該工廠介面中的抽象方法的返回值是該抽象類
針對每個具體動物都提供一些對應的工廠類—>實現該介面—>返回值就是需要具體的動物物件
缺點:程式碼量太大
/工廠的介面
public interface Factory {
//就是用來提供常見具體動物的功能
public abstract Animal createAnimal() ;
}

public class CatFactory implements Factory {
//由貓工廠類提供物件
@Override
public Animal createAnimal() {
return new Cat() ;
}
}
3,單例模式
在記憶體中始終只有一個該類物件
餓漢式
特點:一載入該類便會建立一個物件
要求:無參構造私有化
在成員變數位置建立該類的例項
需要提供公共的訪問方法
//餓漢式
public class Student {

//無參構造私有化,目的是為了讓外界不建立物件
private Student(){

}

//在成員變數的位置建立該類的例項
//靜態只能訪問靜態,所以需要加上靜態修飾
//為了不讓外界修改當前這個例項,所以加入private修飾
private static Student s = new Student() ;

//提供給公共的訪問方法,返回值就是該類的例項物件
public static Student getStudent(){
    return s ;
}

}

懶漢式
特點:並不是載入某個類就直接建立物件,而是在需要的時候再建立物件
1)懶載入
2)執行緒的安全問題:使用同步程式碼塊進行解決
public class Teacher {

/**
 * 構造方法私有化
 */
private Teacher(){}

//在成員變數位置宣告變數
private static Teacher t = null ; //共享資料

//提供公共的方法訪問
public synchronized static Teacher getTeacher(){ //Teacher.class鎖物件

    //判斷 噹噹前該物件沒有更多引用的時候,才建立物件
    //t1,t1 ,t3 三個物件
    if(t==null){

        t = new Teacher() ;
    }
    return t ;
}

}
如果是開發中使用的是———>餓漢式(不會出現問題的單例模式)
如果是面試中使用的是———->懶漢式(可能會出現問題的單例模式,執行緒安全問題)
面試題: 簡單闡述下單例模式有幾種,並且寫出一個單例模式程式碼!(寫懶漢式) 就想問你能否想到懶漢式中多執行緒的安全問題…

4,裝飾者設計模式
子類封裝子類