工廠模式
需要在一個統一的地方建立物件。
public class BMW320{
public BMW320(){
System.out.print("製造-->BMW320");
}
}
public class BMW320{
public BMW320(){
System.out.print("製造-->BMW320");
}
}
public class Customer{
public static void main(String[] args){
BMW320 bmw320 = new BMW320();
BMW320 bmw523 = new BMW320();
}
}
//產品類
abstract class BMW {
public BMW(){
}
}
public class BMW320 extends BMW {
public BMW320() {
System.out.println("製造-->BMW320");
}
}
public class BMW523 extends BMW{
public BMW523(){
System.out.println("製造-->BMW523");
}
}
//工廠類
public class Factory{
public BMW createBmw(int type){
switch(type){
case 320:
return new BMW320();
case 523:
return new BMW523();
default:
break;
}
return null;
}
}
//客戶類
public class Customer{
public static void main(String[] args){
Factory factory = new Factory();
BMW bmw320 = factory.createBmw(320);
BMW bmw523 = factory.createBmw(523);
}
}
- 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯,用來建立產品。
- 抽象產品角色:一般是具體產品繼承的父類或實現的介面。
- 具體產品角色:工廠類所建立的物件就是此角色的實力。在
java
中由一個具體類實現。
⼯⼚⽅法模式
簡單含義:工廠上面又多了個工廠。
⼯⼚⽅法模式去掉了簡單⼯⼚模式中⼯⼚⽅法的靜態屬性,使得它可以被⼦類繼承。這樣在簡單⼯⼚模式⾥,集中在⼯⼚⽅法上的壓⼒,可以由⼯⼚⽅法模式⾥不同的⼯⼚⼦類來分擔。
⼯⼚⽅法模式組成
1)抽象⼯⼚(工廠上面又抽象了一個工廠)⻆⾊: 這是⼯⼚⽅法模式的核⼼,它與應⽤程式⽆關。是具體⼯⼚⻆⾊必須實現的接⼝或者必須繼承的⽗類。在JAVA中它由抽象類或者接⼝來實現。
2)具體⼯⼚⻆⾊:它含有和具體業務邏輯有關的程式碼。由應⽤程式調⽤以建立對應的具體產品的對 象。
3)抽象產品⻆⾊:它是具體產品繼承的⽗類或者是實現的接⼝。在JAVA中⼀般有抽象類或者接⼝來實 現。
4)具體產品⻆⾊:具體⼯⼚⻆⾊所建立的物件就是此⻆⾊的例項。在JAVA中由具體的類來實現。 (開閉原則)當有新的產品產⽣時,只要按照抽象產品⻆⾊、抽象⼯⼚⻆⾊提供的合同來⽣成,那麼 就可以被客戶使⽤,⽽不必去修改任何已有 的程式碼。
策略模式
定義:定義⼀組演算法,將每⼀個演算法封裝起來,從⽽使它們可以相互切換。
特點:
1)⼀組演算法,那就是不同的策略。
2)這組演算法都實現了相同的接⼝或者繼承相同的抽象類,所以可以相互切換。
策略模式涉及到的⻆⾊有三個:
-
封裝⻆⾊:上層訪問策略的⼊⼝,它持有抽象策略⻆⾊的引⽤。
-
抽象策略⻆⾊:提供接⼝或者抽象類,定義策略組必須擁有的⽅法和屬性。
- 具體策略⻆⾊:實現抽象策略,定義具體的演算法邏輯。
策略模式的優點
(1)策略模式提供了管理相關的演算法族的辦法。策略類的等級結構定義了⼀個演算法或⾏為族。恰當使 ⽤繼承可以把公共的程式碼移到⽗類⾥⾯,從⽽避免程式碼重複。
(2)使⽤策略模式可以避免使⽤多重條件(if-else)語句。多重條件語句不易維護,它把採取哪⼀種演算法或採取哪⼀種⾏為的邏輯與演算法或⾏為的邏輯混合在⼀起,統統列在⼀個多重條件語句⾥⾯,⽐使⽤繼 承的辦法還要原始和落後。
策略模式的缺點
(1)客戶端必須知道所有的策略類,並⾃⾏決定使⽤哪⼀個策略類。這就意味著客戶端必須理解這些 演算法的區別,以便適時選擇恰當的演算法類。換⾔之,策略模式只適⽤於客戶端知道演算法或⾏為的情況。
(2)由於策略模式把每個具體的策略實現都單獨封裝成為類,如果備選的策略很多的話,那麼物件的數⽬就會很可觀。