設計模式之工廠模式

一.什麼是工廠模式

工廠方法模式定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類

二.工廠模式的寫法

1.簡單的工廠模式
在這裏插入圖片描述我們來看下具體的寫法:
接口類;


public interface Calculate {

	double calulate(double x,double y);
	
}

實現類:

public class Minus implements Calculate{

	@Override
	public double calulate(double x,double y) {

		double result=x-y;
		System.out.println("Minus Result:"+result);
		return result;
	}

}

public class Plus implements Calculate {

	@Override
	public double calulate(double x, double y) {
		double result=x+y;

		System.out.println("Plus Result:"+result);
		return result;
	}

}

工廠的創建:

/** 
 * 簡單工廠模式
 * @author Seven
 *
 */
public class Factory {
	

	
	/** 根據需求創建不同的對象
	 * @param cal
	 * @return
	 */
	public static Calculate createCalculate(String cal) {
		switch (cal) {
		case "plus":
			
			return new Plus();
		case "minus":
			
			return new Minus();
		default:
			break;
		}
		return null;
		
	}

}

客戶端調用:

public class Client {

	public static void main(String[] args) {
		
		Factory.createCalculate("plus").calulate(2, 1);
		Factory.createCalculate("minus").calulate(2, 1);
	}
}

打印結果:
Plus Result:3.0
Minus Result:1.0

簡單工廠的好處,就是在創建對象的時候給出了判斷的必要,根據客戶端動態根據條件生成所需要的對象,祛除了對具體產品的依賴。不過這樣貌似在修改的時候增加了一些麻煩,比如我們要新加一個具體實現類的時候,是不是要修改工廠裏面的方法。這樣就違背了設計模式的開閉原則,雖然我們擴展開放了,但是我們修改也開放了,所以我們要把工廠方法給抽象出去,於是就有了下面的工廠方法模式

2.工廠方法模式
我們接着上面說,如果我們此時要加另外一個算法,是不是要去修改簡單工廠類,這樣其實已經違背了設計原則,於是我們將工廠類也抽象出來,於是便有了下面的UML類圖:
在這裏插入圖片描述
大致說下思路,這樣抽象出來的好處,就是我們無論擴展多少個都不用去修改工廠的方法,只需要新建一個算法類去實現算法接口,然後新建一個具體實現工廠類去繼承這個抽象工廠返回新建的算法對象即可。
這裏貼一下抽象工廠和具體實現類:

public abstract class Factory {

	public abstract  Calculate createCalulate();
}

具體創建工廠:

public class DivFactory extends Factory {

	@Override
	public Calculate createCalulate() {
		return new Div();
	}

}

客戶端調用

public class Client {

	public static void main(String[] args) {
		
			Factory factory=new DivFactory();
			Calculate div=factory.createCalulate();
			div.calulate(6, 2);
	}
}

打印結果
Div Result:3.0

3.抽象的工廠模式它的定義就是提供一個創建一系列相關或相互依賴的對象的接口,而無需指定他們具體的類,就拿上面的例子來說,我們的Factory裏面只提供一個抽象方法來生成計算的工廠,如果要生成其他類型的工廠呢,所以把生成的對象的接口添加到Factory中,這樣就是基本的抽象工廠模式了。

三.思維拓展

我們可以嘗試用反射加簡單工廠來實現對象的創建,這裏就不具體介紹了。可以參考我之前寫的一篇反射註解的總結,自己寫一寫。

四.總結

本文介紹了什麼是工廠模式以及工廠模式的常見寫法,如果本文對你有用,可以點個贊,如果有不正之處,歡迎留下你的評論,謝謝!

發佈了57 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章