GoF設計模式-簡單工廠模式

簡單工廠模式(重要):

    又叫靜態工廠方法,可根據傳遞不同的參數返回不同類的對象,專門定義一個類來創建其他類的實例,這些類的實例通常具有共同的父類(接口,抽象類)。在工廠類中只需要簡單的邏輯判斷,不關心業務處理,滿足單一職責原則 


簡單工廠模式適用環境:

    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.可以將工廠的靜態方法寫到抽象父類中或者某個類充當自己的工廠,在自己的靜態方法中返回自己的對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章