標籤:
lFactory 方法模式概述?Factory 方法模式中抽象工廠類負責定義建立對象的介面,具體對象的建立工作由繼承抽象工廠的具體類實現。l優點?用戶端不需要在負責對象的建立,從而明確了各個類的職責,如果有新的對象增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,後期維護容易,增強了系統的擴充性l缺點?需要額外的編寫代碼,增加了工作量
動物抽象類別:publicabstract Animal { public abstract void eat(); }
工廠介面:publicinterface Factory {public abstract AnimalcreateAnimal();}
具體狗類:publicclass Dog extends Animal {}
具體貓類:publicclass Cat extends Animal {}
開始,在測試類別中每個具體的內容自己建立對象,但是,建立對象的工作如果比較麻煩,就需要有人專門做這個事情,所以就製造了一個專門的類來建立對象。發現每次修改(主要是後期添加)工廠代碼太麻煩,用Factory 方法改進,針對每一個具體的實現提供一個具體工廠。
狗工廠:publicclass DogFactoryimplements Factory {
public Animal createAnimal(){…}
}
貓工廠:publicclass CatFactoryimplements Factory {
public Animal createAnimal(){…}
}
具體代碼如下:
Animal抽象類別:
package 建立型_Factory 方法模式;public abstract class Animal {public abstract void eat();}
Dog類:
package 建立型_Factory 方法模式;public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃肉");}}
Cat類:
package 建立型_Factory 方法模式;public class Cat extends Animal {@Overridepublic void eat() {System.out.println("貓吃魚");}}
Factory介面:
package 建立型_Factory 方法模式;public interface Factory {public abstract Animal createAnimal();}
專門建立狗工廠的DogFactory類:
package 建立型_Factory 方法模式;//這個工廠主要造狗,但是別人不知道,因為是返回Animalpublic class DogFactory implements Factory {@Overridepublic Animal createAnimal() {return new Dog();}}專門建立貓工廠的CatFactory類:
package 建立型_Factory 方法模式;//專門建立貓工廠public class CatFactory implements Factory {@Overridepublic Animal createAnimal() {return new Cat();}}
主方法AnimalMain類:
package 建立型_Factory 方法模式;public class AnimalMain {public static void main(String[] args) {//需求:我要買只狗Factory factory = new DogFactory();Animal animal = factory.createAnimal();animal.eat();System.out.println("------------");//需求:我要買只貓factory = new CatFactory();//要買貓的話,這裡程式就把工廠給換成造貓的那個工廠了animal = factory.createAnimal();animal.eat();}}
Java設計模式之Factory 方法模式