有点简单工厂模式感觉的go代码

版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则会用法律维权。 https://blog.csdn.net/stpeace/article/details/83904142

    看代码:

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 

猜你喜欢

转载自blog.csdn.net/stpeace/article/details/83904142