緒論
其實很早以前就看過一些關於設計模式的文章,知道這個很重要,爲此還寫了一些demo,但是在實際開發過程中基本沒有使用過。原因:不習慣,不記得,其實更多的是不明白什麼情況下可以使用。所以導致自己的代碼又臭又長,還會重複的造一些輪子,使代碼看起來毫無亮點。
這次學習設計模式,更多的是分析理解,思考以往編程中哪些地方可以用到這些模式,從而可以使以後的自己在開發相同模塊時可以使用。
理解
清楚自己要什麼,不用關心具體實現。
在OA系統開發的過程中,有大量的審批工作流,每種工作流中涉及到的無非是提交申請、撤回申請和領導審批。那麼像這樣的情況,我是不是就可以使用工廠模式?我認爲可以。
- 工廠創建對象。
- 對象執行方法。
代碼
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)