簡單工廠模式(重要):
又叫靜態工廠方法,可根據傳遞不同的參數返回不同類的對象,專門定義一個類來創建其他類的實例,這些類的實例通常具有共同的父類(接口,抽象類)。在工廠類中只需要簡單的邏輯判斷,不關心業務處理,滿足單一職責原則
簡單工廠模式適用環境:
1.工廠類負責創建的對象較少
2.不關心對象創建的細節,甚至類名都不需要記住,只需要知道對象對應的參數
簡單工廠模式的優點:
1.可根據傳遞不同的參數獲取不同類的對象,將對象的創建和使用分離
2.無須知道創建對象的類名,只需知道傳遞參數與對象的對應關係
簡單工廠模式的缺點:
1.增加了系統中類的個數,複雜度增大
2.增加新的對象時,需要修改工廠類的判斷邏輯,違背了開閉原則
3.當需要創建的對象較多時,工廠判斷邏輯過於複雜,不易於擴展和維護
4.由於工廠類使用了靜態方法,無法形成繼承結構而使用多態
簡單工廠模式的例子:
Animal接口父類
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public interface Animal {
void eat();
}
Cat子類
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public class Cat implements Animal{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
* @throws
* @return
* @see creation.StaticFactoryMethod.Animal#eat()
*/
@Override
public void eat() {
System.out.println("小貓喫魚。。。");
}
}
Dog子類
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public class Dog implements Animal{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
* @throws
* @return
* @see creation.StaticFactoryMethod.Animal#eat()
*/
@Override
public void eat() {
System.out.println("小狗喫骨頭。。。");
}
}
工廠類
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public class AnimalFactory {
public static void main(String[] args) {
Animal animal = AnimalFactory.getAnimal("dog");
animal.eat();
}
public static Animal getAnimal(String name) {
if (name.equalsIgnoreCase("dog")) {
return new Dog();
}
if (name.equalsIgnoreCase("cat")) {
return new Cat();
}
return null;
}
}
簡單工廠模式擴展:
1.可以將工廠的靜態方法寫到抽象父類中或者某個類充當自己的工廠,在自己的靜態方法中返回自己的對象