一、簡單工廠模式
簡單工廠模式概述?又叫靜態工廠方法模式,它定義一個具體的工廠類負責創建一些類的實例優點?客戶端不需要在負責對象的創建,從而明確了各個類的職責缺點?這個靜態工廠類負責所有對象的創建,如果有新的對象增加,或者某些對象的創建方式不同,就需要不斷的修改工廠類,不利于后期的維護代碼://動物類public abstract class Animal { public abstract void eat();}
//貓類
public class Cat extends Animal { @Override public void eat() { System.out.PRintln("貓吃魚"); }}
//狗類
public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
//動物工廠
public class AnimalFactory { private AnimalFactory() { } public static Animal createAnimal(String type) { if ("dog".equals(type)) { return new Dog(); } else if ("cat".equals(type)) { return new Cat(); } else { return null; } }}
//測試類
public class AnimalDemo { public static void main(String[] args) { // 具體類調用 Dog d = new Dog(); d.eat(); Cat c = new Cat(); c.eat(); System.out.println("------------"); Animal a = AnimalFactory.createAnimal("dog"); a.eat(); a = AnimalFactory.createAnimal("cat"); a.eat(); // NullPointerException a = AnimalFactory.createAnimal("pig"); if (a != null) { a.eat(); } else { System.out.println("對不起,暫時不提供這種動物"); } }}
二、工廠方法模式
工廠方法模式概述?工廠方法模式中抽象工廠類負責定義創建對象的接口,具體對象的創建工作由繼承抽象工廠的具體類實現。優點?客戶端不需要在負責對象的創建,從而明確了各個類的職責,如果有新的對象增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,后期維護容易,增強了系統的擴展性缺點?需要額外的編寫代碼,增加了工作量//動物類public abstract class Animal { public abstract void eat();}
//工廠接口
public interface Factory { public abstract Animal createAnimal();}
//貓類
public class Cat extends Animal { @Override public void eat() { System.out.println("貓吃魚"); }}
//狗類
public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
//貓工廠類
public class Cat extends Animal { @Override public void eat() { System.out.println("貓吃魚"); }}
//狗工廠類
public class DogFactory implements Factory { @Override public Animal createAnimal() { return new Dog(); }}
//測試類
public class AnimalDemo { public static void main(String[] args) { Factory f = new DogFactory(); Animal a = f.createAnimal(); a.eat(); System.out.println("-------"); f = new CatFactory(); a = f.createAnimal(); a.eat(); }}
新聞熱點
疑難解答