標籤:
設計模式之簡單工廠舉例:
l簡單原廠模式概述
?又叫靜態Factory 方法模式,它定義一個具體的工廠類負責建立一些類的執行個體
l優點
?用戶端不需要在負責對象的建立,從而明確了各個類的職責
l缺點
這個靜態工廠類負責所有對象的建立,如果有新的對象增加,或者某些對象的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護
概述:
動物抽象類別:public abstract Animal { public abstract void eat(); }
具體狗類:public class Dog extends Animal {}
具體貓類:public class Cat extends Animal {}
開始,在測試類別中每個具體的內容自己建立對象,但是,建立對象的工作如果比較麻煩,就需要有人專門做這個事情,所以就知道了一個專門的類來建立對象。
原始碼:
package 建立型_簡單原廠模式;public abstract class Animal {public abstract void eat();}
package 建立型_簡單原廠模式;public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃肉");}}
package 建立型_簡單原廠模式;public class Cat extends Animal {@Overridepublic void eat() {System.out.println("貓吃魚");}}
package 建立型_簡單原廠模式;//如果你想買狗或者貓,那叫這個工廠類去造出來,你就不用早了public class AnimalFactory {private AnimalFactory(){}//下面寫的static方法,但是也不是很好,因為後面很可能還要加一些方法,比如Pig,...public static Dog createDog(){return new Dog();}public static Cat createCat(){return new Cat();}//所以面向介面或抽象編程,穿什麼類型就造什麼類型,但是還是有缺陷可能傳入的不能造public static Animal createAnimal(String type){if("dog".equals(type)){return new Dog();} else if("cat".equals(type)){return new Cat();} else{return null;}}}
package 建立型_簡單原廠模式;public class AnimalMain {public static void main(String[] args) {//具體類調用,自己造狗和貓 最原始的Dog dog = new Dog();dog.eat();Cat cat = new Cat();cat.eat();System.out.println("---------");//工廠有了後,通過工廠給造 有些缺陷的//AnimalFactory af = new A..//不能再new,因為提供的是私人的構造方法Dog dog2 = AnimalFactory.createDog();Cat cat2 = AnimalFactory.createCat();dog2.eat();cat2.eat();System.out.println("---------");//工廠改進後Animal animal = AnimalFactory.createAnimal("dog");animal.eat();//重新為animal賦值animal = AnimalFactory.createAnimal("cat");animal.eat();//但是這個工廠還是有小問題的,你比如animal = AnimalFactory.createAnimal("pig");//animal.eat();//編譯不會報錯,但是運行會爆出null 指標異常//所以呢,我們在造東西(對象)時,要先判斷一下,只要是對象就要判斷if(animal!=null){animal.eat();} else{System.out.println("對不起,此工廠暫時不提供造豬pig");}}}
Java設計模式之簡單原廠模式