Java設計模式:工廠方法模式

緒論

其實很早以前就看過一些關於設計模式的文章,知道這個很重要,爲此還寫了一些demo,但是在實際開發過程中基本沒有使用過。原因:不習慣,不記得,其實更多的是不明白什麼情況下可以使用。所以導致自己的代碼又臭又長,還會重複的造一些輪子,使代碼看起來毫無亮點。
這次學習設計模式,更多的是分析理解,思考以往編程中哪些地方可以用到這些模式,從而可以使以後的自己在開發相同模塊時可以使用。

理解

工廠方法模式又稱多態性工廠模式。是簡單工廠模式的衍生。
由於增加了工廠接口,每個實現的工廠之間相互獨立,互不影響,增強了可擴展性。

  1. 創建具體工廠。
  2. 工廠創建對象。
  3. 對象執行操作。

代碼

IFactory.java

package com.factory;
// 工廠接口
public interface IFactory {
	public Workflow createWorkflow();
}

LeaveFactory.java

package com.factory;
// 請假工廠
public class LeaveFactory implements IFactory {

	@Override
	public Workflow createWorkflow() {	
		return new LeaveWorkflow();
	}
}

SealFactory.java

package com.factory;
// 蓋章工廠
public class SealFactory implements IFactory {

	@Override
	public Workflow createWorkflow() {
		return new SealWorkflow();
	}
}

Workflow.java

package com.factory;

// 審批工作流接口
public interface Workflow {
	// 啓動
	public void startProcess();
	// 審批
	public void approveProcess();
}

LeaveWorkflow.java

package com.factory;
// 請假
public class LeaveWorkflow implements Workflow {

	@Override
	public void startProcess() {
		System.out.println("提交請假審批");
	}

	@Override
	public void approveProcess() {
		System.out.println("審批請假信息");
	}
}

SealWorkflow.java

package com.factory;
// 蓋章
public class SealWorkflow implements Workflow {

	@Override
	public void startProcess() {
		System.out.println("提交蓋章審批");
	}

	@Override
	public void approveProcess() {
		System.out.println("審批蓋章信息");
	}
}
package com.factory;

public class Main {

	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		Workflow seal = getWorkflow1("com.factory1.SealFactory");
		seal.startProcess();
		seal.approveProcess();
		Workflow leave = getWorkflow2(LeaveFactory.class);
		leave.startProcess();
		leave.approveProcess();
	}

	public static Workflow getWorkflow1(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
		Class<?> c = Class.forName(className);
		IFactory factory = (IFactory)c.newInstance();
		return factory.createWorkflow(); 
	}
	
	public static Workflow getWorkflow2(Class<?> c) throws InstantiationException, IllegalAccessException{
		IFactory factory = (IFactory)c.newInstance();
		return factory.createWorkflow();
	}
}

結果

在這裏插入圖片描述

這樣的話,可以在配置文件裏面進行不同的配置,使用不同的工廠,有點像數據庫配置。

(若有什麼錯誤,請留言指正,3Q)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章