一、定義
工廠模式是爲了解決簡單工廠模式中,工廠判斷方法的日漸複雜而衍生出來的模式。如果後面需要創建的“產品”越來越多,那麼這個簡單工廠類會包含越來越多的if-else判斷類。這樣維護起來會非常的麻煩。同樣也違反了開閉原則。
二、設計類圖
工廠模式也就是鼠標工廠是個父類,有生產鼠標這個接口。戴爾鼠標工廠,惠普鼠標工廠繼承它,可以分別生產戴爾鼠標,惠普鼠標。生產哪種鼠標不再由參數決定,而是創建鼠標工廠時,由戴爾鼠標工廠創建。後續直接調用鼠標工廠.生產鼠標()即可。
三、代碼實現
鼠標的創建接口:
public interface Mouse {
void sayHi();
}
public class HaierMouse implements Mouse {
@Override
public void sayHi() {
System.out.println("Haier Mouse Say Hi");
}
}
public class HisenseMouse implements Mouse {
@Override
public void sayHi() {
System.out.println("Hisnese Mouse Say Hi.");
}
}
創建鼠標的工廠:
public abstract class MouseFactory {
public abstract Mouse createMouse();
}
海爾的鼠標工廠:
public class HaierMouseFactory extends MouseFactory {
@Override
public Mouse createMouse() {
return new HaierMouse();
}
}
海信的鼠標工廠:
public class HisenseMouseFactory extends MouseFactory {
@Override
public Mouse createMouse() {
return new HisenseMouse();
}
}
這裏是關鍵,實例化的動作又從工廠類中轉義到了客戶端實現,直接鼠標工廠.創建鼠標
public class Main {
public static void main(String[] args) {
//創建一個海爾的鼠標
MouseFactory mouseFactory = new HaierMouseFactory();
mouseFactory.createMouse().sayHi();
//創建一個海信的鼠標
MouseFactory mouseFactory2 = new HisenseMouseFactory();
mouseFactory2.createMouse().sayHi();
}
}
執行結果:
Haier Mouse Say Hi
Hisnese Mouse Say Hi.
Process finished with exit code 0