有點簡單工廠模式感覺的go程式碼
阿新 • • 發佈:2018-11-10
看程式碼:
package main import ( "fmt" ) // task process 基礎層 type TaskIntf interface { Process() } type TaskProc struct { TaskName string NewProc func() TaskIntf } var taskProcMap = make(map[string]*TaskProc, 0) func registerTaskProc(taskproc *TaskProc) { taskProcMap[taskproc.TaskName] = taskproc } func getTaskProc(taskName string) (*TaskProc, int) { if _, ok := taskProcMap[taskName]; ok { return taskProcMap[taskName], 0 } return nil, -1 } // task 基礎層 type TaskBase struct { TaskId string } // task 業務層 type Task1 struct { TaskBase x int y int } type Task2 struct { TaskBase x int } // task process 業務層 func (p *Task1) Process() { fmt.Println("process heheda") } func register1(taskname string) { handler := TaskProc{taskname, func() TaskIntf { return new(Task1) } } registerTaskProc(&handler) } func (p *Task2) Process() { fmt.Println("process haha", p.TaskId) } func register2(taskname string) { handler := TaskProc{taskname, func() TaskIntf { return new(Task2) } } registerTaskProc(&handler) } // 主函式入口 func main() { { register1("task1") proc, _ := getTaskProc("task1") task := proc.NewProc() task.Process() } { register2("task2") proc, _ := getTaskProc("task2") task := proc.NewProc() task.Process() } }
結果:
process heheda
process haha