設計模式-簡單工廠模式概述和使用-介面

ZHOU_VIP發表於2017-06-04

簡單工廠模式概述:

又叫靜態工廠方法模式,它定義一個具體的工廠類負責建立一些類的例項

優點:

客戶端不需要再負責物件的建立,從而明確了各個類的職責

缺點:

這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,

就需要不斷地修改工廠類,不利於後期的維護


package cn.itcast_01;

public abstract class Animal {
    
    public abstract void eat();
    
}


package cn.itcast_01;

public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("貓吃魚");
	}

}


package cn.itcast_01;

public class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}

}


package cn.itcast_01;

public class AnimalFactory {

	private AnimalFactory() {
	}

	// 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 cn.itcast_01;

public class AnimalDemo {
	public static void main(String[] args) {
		// 具體類呼叫
		Dog d = new Dog();
		d.eat();
		Cat c = new Cat();
		c.eat();
		System.out.println("------------");

		// 工廠有了後,通過工廠給造
		// Dog dd = AnimalFactory.createDog();
		// Cat cc = AnimalFactory.createCat();
		// dd.eat();
		// cc.eat();
		// System.out.println("------------");

		// 工廠改進後
		Animal a = AnimalFactory.createAnimal("dog");
		a.eat();
		a = AnimalFactory.createAnimal("cat");
		a.eat();

		
		a = AnimalFactory.createAnimal("pig");// NullPointerException
		if (a != null) {                      // 出現空指標,要加判斷
			a.eat();
		} else {
			System.out.println("對不起,暫時不提供這種動物");
		}
	}
}



相關文章