场景

在paas中间件众多的场景下,做一款用于巡检多个paas组件健康状态的工具。工具的编写需要具备一定的扩展性,便于后续新增某个paas组件巡检的功能。

管理多个paas组件,需要方便扩展新增。

思路

使用面向对象编程思想,首先对巡检任务CronJob进行抽象(interface),抽象出JobManager框架程序,在对paas组件巡检功能编程中,仅需要实现特定的paas组件的CronJob,增加到Job列表中统一处理。

实现

假定paas组件有两个:abase、redis

  • 首先定义、抽象CronJob和JobManager
package job

import (
	"fmt"
)

//用于定义任务需要实现的方法
type CronJob interface {
	Run()
	JobName() string
}

//任务管理器
type JobManager struct {
	Jobs []CronJob
}

func NewJobManager() *JobManager {
	return &JobManager{}
}

//注册job
func (jm *JobManager) RegisterJob(job CronJob) {
	jm.Jobs = append(jm.Jobs, job)
}

//job执行
func (jm *JobManager) Start() {
	for _, job := range jm.Jobs {
		fmt.Println("job name:", job.JobName())
		job.Run()
	}
}
  • paas组件实现

abase.go

package job

import (
	"fmt"
)

type AbaseJob struct{}

func (a *AbaseJob) Run() {
	fmt.Println("abase job running!!!")
}

func (a *AbaseJob) JobName() string {
	return "abase job"
}

redis.go

package job

import (
	"fmt"
)

type RedisJob struct{}

func (a *RedisJob) Run() {
	fmt.Println("redis job running!!!")
}

func (a *RedisJob) JobName() string {
	return "redis job"
}
  • 整体调用
package main

import (
	"demo_jobmanager/job"
)

func main() {
	//实例化
	jm := job.NewJobManager()
	//注册job
	jm.RegisterJob(&job.AbaseJob{})
	jm.RegisterJob(&job.RedisJob{})
	//执行
	jm.Start()
}
本站无任何商业行为
个人在线分享 » Java/Golang:活用interface,增加程序扩展性
E-->