Java設計模式:工廠模式

緒論

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

理解

清楚自己要什麼,不用關心具體實現。
在OA系統開發的過程中,有大量的審批工作流,每種工作流中涉及到的無非是提交申請、撤回申請和領導審批。那麼像這樣的情況,我是不是就可以使用工廠模式?我認爲可以。

  1. 工廠創建對象。
  2. 對象執行方法。

代碼

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("審批蓋章信息");
	}
}

WorkflowFactory.java

package com.factory;

// 工作流工廠
public class WorkflowFactory {
	public final static String WORKFLOW_SEAL = "seal";
	public final static String WORKFLOW_LEAVE = "leave";
	
	// 獲取對應工作流
	public Workflow getWorkflow(String flag){
		if(WORKFLOW_SEAL.equals(flag)){
			return new SealWorkflow();
		}else if(WORKFLOW_LEAVE.equals(flag)){
			return new LeaveWorkflow();
		}
		return null;
	}
}

Main.java

package com.factory;

public class Main {
	public static void main(String[] args) {
		WorkflowFactory factory = new WorkflowFactory();
		Workflow seal = factory.getWorkflow(WorkflowFactory.WORKFLOW_SEAL);
		seal.startProcess();
		seal.approveProcess();
		Workflow leave = factory.getWorkflow(WorkflowFactory.WORKFLOW_LEAVE);
		leave.startProcess();
		leave.approveProcess();
	}
}

結果

在這裏插入圖片描述

目前OA的審批流程差不多有15個,我如果按照這種方式寫,那又是一坨代碼,感覺並沒有簡單多少,而且以後還會添加各種什麼,這塊會變得越來越複雜,所以對目前的情況並不是太適用。

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

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