1. 程式人生 > >有點簡單工廠模式感覺的go程式碼

有點簡單工廠模式感覺的go程式碼

    看程式碼:

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