在go语言中单例模式、简单工厂模式、策略模式实现代码示例
Go  /  管理员 发布于 2年前   443
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
下面是用go语言实现单例模式、简单工厂模式、策略模式
单例模式:
某个类只能有一个实例,提供一个全局的访问点。
简单工厂:
一个工厂类根据传入的参量决定创建出那一种产品类的实例。
策略模式:
定义一系列算法,把他们封装起来,并且使它们可以相互替换。
简单工厂+单例模式示例代码:
//Singleton 是单例模式类
type SingletonFactory struct{}
// 定义接口
type RepoAPI interface {
Put(data map[string]interface{}) map[string]interface{}
}
var singleton *SingletonFactory
var once sync.Once
// GetInstance 用于获取单例模式对象,多协程的场景下不是线程安全的,使用 sync.Once 来实现
func GetFactoryInstance() *SingletonFactory {
once.Do(func() {
singleton = &SingletonFactory{}
})
return singleton
}
// 简单工厂 创建对应的服务类
func (t *SingletonFactory) FactoryCreate(cate, token string) RepoAPI {
if cate == "github" {
return &github.GithubConstruct{
Token: token,
}
} else if cate == "gitee" {
return &gitee.GiteeConstruct{
Token: token,
}
}
return nil
}
策略模式示例代码:
// 策略模式类,定义 service 属性 实际为具体的业务类
type RepoStrategyConstruct struct {
Service *factory.RepoAPI
}
// 定义策略方法 入参为指定的接口(具体的业务类)
func RepoStrategy(api factory.RepoAPI) *RepoStrategyConstruct {
return &RepoStrategyConstruct{
Service: &api,
}
}
服务层实现
注意:都要实现 接口 RepoAPI 定义的方法
//服务1
type GiteeConstruct struct {
Token string
}
func (t *GiteeConstruct) Put(data map[string]interface{}) map[string]interface{} {
log.Println("gitee",data,t.Token)
return nil
}
//服务2
type GithubConstruct struct {
Token string
}
func (t *GithubConstruct) Put(data map[string]interface{}) map[string]interface{} {
log.Println("github",data,t.Token)
return nil
}
控制层调用
// 简单工厂调用
log.Println("单例 | 简单工厂模式调用")
instance := factory.GetFactoryInstance()
create := instance.FactoryCreate("gitee","gitee-token")
create.Put(nil)
// 策略模式调用
log.Println("策略模式调用")
repoStrategy := strategy.RepoStrategy(&github.GithubConstruct{
Token: "github-token",
})
service := *repoStrategy.Service
service.Put(nil)
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号