场景
在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,增加程序扩展性
发表评论 取消回复