1. 程式人生 > >Java多執行緒-56-簡單工廠設計模式

Java多執行緒-56-簡單工廠設計模式

關於設計模式,前面我們學習了單例設計模式,這篇再來學習一個工廠方法模式,在介紹工廠方法模式之前,我們來看一個簡單工廠模式。工廠模式的最大優點就是客戶端不需要再建立物件,工廠類中就幫你提前建立好了,直接通過工廠類名點方法呼叫就好。簡單工廠模式又叫靜態方法工廠模式,它定義了一個具體的工廠類來建立一些類的例項。

1.程式碼舉例

在Eclipse下建立一個samplefactory包,然後下面建立以下幾個類,程式碼如下。

Animal.java程式碼

package samplefactory;

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

AnimalFactory.java程式碼

package samplefactory;

public class AnimalFactory {
	
	public static Dog createDog() {
		return new Dog();
	}
    
	public static Cat createCat() {
		return new Cat();
	}
}

Cat.java 程式碼

package samplefactory;

public class Cat extends Animal {

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

}

Dog.java程式碼

package samplefactory;

public class Dog extends Animal {

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

}

Test.java程式碼

package samplefactory;

public class Test {

	public static void main(String[] args) {
		Dog d = AnimalFactory.createDog();
		d.eat();
		
		Cat c = AnimalFactory.createCat();
		c.eat();

	}

}

執行下

狗吃肉
貓吃魚

看到AnimalFactory類中需要建立多個動物,我們優化下程式碼,用一個方法就可以包括上面dog和cat的建立過程。

package samplefactory;

public class AnimalFactory {
	
	public static Animal create(String name) {
		if("dog".equals(name)) {
			return new Dog();
		}else if("cat".equals(name)) {
			return new Cat();
		}else {
			return null;
		}
	}
    
}

修改下測試類

package samplefactory;

public class Test {

	public static void main(String[] args) {
		Dog d = (Dog) AnimalFactory.create("dog");
		d.eat();
		
		Cat c = (Cat) AnimalFactory.create("cat");
		c.eat();

	}

}

上面就是簡單工廠模式,優點就是客戶端不需要再負責物件的建立,從而明確了各個類的職責。缺點也很明顯,這個靜態工廠類負責所有物件的建立,如果有新物件增加,或者有些物件建立方式不同,就要不斷地修改工廠類,不利於後期維護。下一篇,我們在這個基礎上學習工廠方法模式,繼續使用上面優點,避免缺點。