1. 程式人生 > 其它 >【設計模式學習】第三種: FactoryMethod - 工廠方法模式

【設計模式學習】第三種: FactoryMethod - 工廠方法模式

技術標籤:設計模式學習設計模式java

第三種: FactoryMethod - 工廠方法模式

設計模式真的很不錯!


任何可以產生物件的方法或類都可以成為工廠,單例也是一種工廠
那麼有了new之後為什麼還要有工廠呢?
第一,我要控制生產過程。第二,我要控制權限,修飾,加些日誌…

下面我們看一個簡單的例子,來引出工廠方法模式。

1. 引例

假設你現在要選擇一種交通工具出門,有三種選擇:car ,plane, broom(掃把)。你該怎麼設計,可以實現任意定製交通工具。在學過策略之後,這個應該很簡單。

public interface Moveable {
	public void go
(); } public class Car implements Moveable{ public void go() { System.out.println("Car go wuwuwu..."); } } public class Plane implements Moveable{ public void go(){ System.out.println("plane flying shuashua..."); } } public class Broom implements Moveable{ public void
go() { System.out.println("broom flying chuachua..."); } } public class main { public static void main(String[] args) { Moveable m = new Broom(); m.go(); } }

在這裡插入圖片描述
這樣我們想選擇什麼交通工具,就new一個就行了。

2. 如果現在要求你任意定製這個交通工具的生產過程。

除了new外,還能用其他的方法來實現嗎?
當然有,就是工廠,首先讓我們來了解一下簡單工廠:把所有的構造方法都放到一個工廠類中。

/*
 * 簡單工廠的可擴充套件性不好
 */
public class SimpleVehicleFactory { public Car createCar(){ //前置操作,加一些許可權控制。 return new Car(); } public Broom createBroom(){ return new Broom(); } public Plane createPlane(){ return new Plane(); } }

但是,簡單工廠可擴充套件性不好,因為這些操作需要被寫死,而且如果我要新增一種新的交通方式,就需要再在裡面加一個方法。

3. 那麼怎麼讓工廠更加靈活呢?–>使用工廠方法

public interface Moveable {
	public void go();
}

public class CarFactory {
	public Moveable create(){
		System.out.println("a car created!");
		return new Car();
	}
}

public class PlaneFactory {
	public Moveable create(){
		System.out.println("a plane created!");
		return new Plane();
	}
}

public class BroomFactory {
	public Moveable create(){
		System.out.println("a broom created!");
		return new Broom();
	}
}

public class main {
	public static void main(String[] args) {
		Moveable m = new CarFactory().create();
		m.go();
	}
}

給每一種交通工具做一個工廠類,那麼需要擴充套件時我只需要加一個類就可以了。
這就是工廠方法模式,也不難吧哈哈。下節我們看一個更常用的模式———抽象工廠模式。